title: Error Inflating CollapsingToolbarLayout
body: <p>I recently updated the support design library to the latest version and now every activity that has a <code>CollapsingToolbarLayout</code> throws the following exception: </p>
  
  <pre><code>    java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'android.support.v4.graphics.drawable.DrawableCompat' appears in /data/data/com.radioafrica.music/files/instant-run/dex/slice-com.android.support-support-v4-24.0.0-beta1_f8cf3ba4c70f87f407a745b9fa14a2205d0b587c-classes.dex)
  </code></pre>
  
  <p>The full error log is as follows:</p>
  
  <pre><code>java.lang.RuntimeException: Unable to start activity ComponentInfo{com.radioafrica.music/com.radioafrica.music.activity.PlaylistTracks}: android.view.InflateException: Binary XML file line #31: Binary XML file line #31: Error inflating class android.support.design.widget.CollapsingToolbarLayout at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5417) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  Caused by: java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'android.support.v4.graphics.drawable.DrawableCompat' appears in /data/data/com.radioafrica.music/files/instant-run/dex/slice-com.android.support-support-v4-24.0.0-beta1_f8cf3ba4c70f87f407a745b9fa14a2205d0b587c-classes.dex) 
      at android.support.design.widget.CollapsingToolbarLayout.setStatusBarScrim(CollapsingToolbarLayout.java:663) 
      at android.support.design.widget.CollapsingToolbarLayout.&lt;init&gt;(CollapsingToolbarLayout.java:197) 
      at android.support.design.widget.CollapsingToolbarLayout.&lt;init&gt;(CollapsingToolbarLayout.java:132)                                                                         
      at java.lang.reflect.Constructor.newInstance(Native Method)                                                                          
      at android.view.LayoutInflater.createView(LayoutInflater.java:619)                                                                          
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)                                                                          
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)                                                                          
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)                                                                          
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)                                                                          
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)                                                                          
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)                                                                          
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)                                                                          
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)                                                                          
      at android.view.LayoutInflater.inflate(LayoutInflater.java:515)                                                                         
      at android.view.LayoutInflater.inflate(LayoutInflater.java:423)                                                                          
      at android.view.LayoutInflater.inflate(LayoutInflater.java:374)                                                                          
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)                                                                          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
  </code></pre>
  
  <p> 
  I cant seem to find what the problem is...</p>
  
  <p>The layout file is:</p>
  
  <p>`
  </p>
  
  <pre><code>&lt;android.support.design.widget.AppBarLayout
      android:id="@+id/app_bar_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:fitsSystemWindows="true"
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"&gt;
  
      &lt;android.support.design.widget.CollapsingToolbarLayout
          android:id="@+id/collapsing_toolbar"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:fitsSystemWindows="true"
          app:contentScrim="?attr/colorPrimary"
          app:expandedTitleMarginEnd="64dp"
          app:expandedTitleMarginStart="48dp"
          app:layout_scrollFlags="scroll|exitUntilCollapsed"&gt;
  
          &lt;ImageView
              android:id="@+id/header"
              android:layout_width="match_parent"
              android:layout_height="280dip"
              android:fitsSystemWindows="true"
              android:scaleType="centerCrop"
              android:src="@drawable/no_cover"
              android:transitionName="avatar"
              app:layout_collapseMode="parallax" /&gt;
  
          &lt;android.support.v7.widget.Toolbar
              android:id="@+id/toolbar"
              android:layout_width="match_parent"
              android:layout_height="?attr/actionBarSize"
              app:layout_collapseMode="pin"
              app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /&gt;
      &lt;/android.support.design.widget.CollapsingToolbarLayout&gt;
  &lt;/android.support.design.widget.AppBarLayout&gt;
  
  &lt;RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_behavior="@string/appbar_scrolling_view_behavior"&gt;
  
      &lt;com.github.glomadrian.loadingballs.BallView
          android:id="@+id/ballView"
          android:layout_width="100dp"
          android:layout_height="100dp"
          android:layout_centerHorizontal="true"
          android:layout_gravity="center"
          android:layout_marginTop="150dip"
          lib:ball_colors="@array/color"
          lib:balls="5"
          lib:enable_size_animation="true"
          lib:max_ball_size="12dp"
          lib:min_ball_size="5dp"
          lib:movement_cycle_time="1500"
          lib:size_cycle_time="500" /&gt;
  
      &lt;android.support.v4.widget.NestedScrollView
          android:id="@+id/nestedScrollView"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:clipToPadding="false"
          android:visibility="gone"
          app:layout_behavior="@string/appbar_scrolling_view_behavior"&gt;
  
          &lt;LinearLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"&gt;
  
              &lt;android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:card_view="http://schemas.android.com/apk/res-auto"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  card_view:cardCornerRadius="0dip"
                  card_view:cardElevation="2dip"
                  card_view:cardPreventCornerOverlap="true"&gt;
  
                  &lt;LinearLayout
                      android:id="@+id/layout"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:orientation="vertical"
                      android:padding="10dip"&gt;
  
                      &lt;TextView
                          android:id="@+id/name"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:textAppearance="@style/TextAppearance.AppCompat.Large"
                          android:textColor="#fff"
                          android:layout_marginBottom="10dip"
                          android:textStyle="bold" /&gt;
  
                      &lt;TextView
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:id="@+id/owner"
                          android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                          android:textColor="#e2e2e2" /&gt;
                  &lt;/LinearLayout&gt;
  
              &lt;/android.support.v7.widget.CardView&gt;
  
              &lt;com.radioafrica.music.view.ExpandableHeightListView
                  android:id="@+id/top_tracks"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:divider="#90ffffff"
                  android:dividerHeight="1dip"
                  android:focusable="false"
                  android:footerDividersEnabled="true"
                  android:headerDividersEnabled="true" /&gt;
  
          &lt;/LinearLayout&gt;
  
      &lt;/android.support.v4.widget.NestedScrollView&gt;
  
  &lt;/RelativeLayout&gt;
  
  &lt;android.support.design.widget.FloatingActionButton
      android:id="@+id/floatingPlayButton"
      style="@style/FabStyle"
      app:layout_anchor="@id/app_bar_layout"
      app:layout_anchorGravity="bottom|right|end" /&gt;
  
  &lt;include layout="@layout/mini_player" /&gt;
  </code></pre>
  
  <p>`</p>
  
  <p>The code for the activity is:</p>
  
  <pre><code>public class AlbumInfo extends AppCompatActivity implements AdapterView.OnItemClickListener, View.OnClickListener {
  
  public static final String ALBUM = "album";
  
  private ExpandableHeightListView expandableHeightListView;
  private NestedScrollView nestedScrollView;
  private ImageView header;
  private BallView ballView;
  private LinearLayout layout;
  private LinearLayout miniPlayer;
  private TextView title, artistTextView;
  private ImageButton playPause;
  private ImageView artwork;
  private CollapsingToolbarLayout collapsingToolbarLayout;
  
  ImageButton previous;
  ImageButton next;
  TextView name;
  TextView owner;
  FloatingActionButton fab;
  
  String songTitle;
  String singer;
  String art;
  boolean playing = false;
  
  private ArrayList&lt;Track&gt; trackList;
  private Album album;
  
  @Subscribe(threadMode = ThreadMode.MAIN)
  public void onEvent(UIEvent uiEvent) {
      miniPlayer.setVisibility(View.VISIBLE);
      miniPlayer.setClickable(true);
  
      songTitle = uiEvent.title;
      singer = uiEvent.artist;
      art = uiEvent.art;
      playing = uiEvent.playing;
  
      togglePlayButtonState();
  
      updateViews();
  }
  
  private void updateViews() {
      Picasso.with(this).load(art).fit().centerCrop().placeholder(R.drawable.no_cover).error(R.drawable.no_cover).into(artwork);
  
      if (NakedGroove.getMediaType().equals(NakedGroove.RADIO)) {
          artistTextView.setText(Html.fromHtml(singer));
          title.setText(songTitle);
      } else {
          artistTextView.setText(singer);
          title.setText(songTitle);
      }
  }
  
  @Subscribe(threadMode = ThreadMode.MAIN)
  public void onEvent(TracksEvent tracksEvent) {
      trackList = tracksEvent.tracks;
  
      if (trackList.size() != 0) {
          ArtistTracksAdapter artistTracksAdapter = new ArtistTracksAdapter(AlbumInfo.this, R.layout.album_tracks_layout, trackList);
          expandableHeightListView.setAdapter(artistTracksAdapter);
  
          if (ballView != null) {
              ballView.setVisibility(View.GONE);
              nestedScrollView.setVisibility(View.VISIBLE);
          }
      }
  }
  
  private Target target = new Target() {
  
      @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
          header.setImageBitmap(bitmap);
          setColors(bitmap);
      }
  
      @Override
      public void onBitmapFailed(Drawable errorDrawable) {
          Picasso.with(AlbumInfo.this).load(album.getAlbumArt()).into(target);
      }
  
      @Override
      public void onPrepareLoad(Drawable placeHolderDrawable) {
          Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.no_cover);
          header.setImageBitmap(bitmap);
          setColors(bitmap);
      }
  };
  
  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
      initActivityTransitions();
      setStatusBarColor();
  
      super.onCreate(savedInstanceState);
      setContentView(R.layout.album);
  
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);
  
      assert getSupportActionBar() != null;
      getSupportActionBar().setHomeButtonEnabled(true);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  
      album = getIntent().getParcelableExtra(ALBUM);
  
      fetchAlbumTracks(album.getId());
  
      expandableHeightListView = (ExpandableHeightListView) findViewById(R.id.top_tracks);
      nestedScrollView = (NestedScrollView) findViewById(R.id.nestedScrollView);
      header = (ImageView) findViewById(R.id.header);
      ballView = (BallView) findViewById(R.id.ballView);
      name = (TextView) findViewById(R.id.name);
      owner = (TextView) findViewById(R.id.owner);
      layout = (LinearLayout) findViewById(R.id.layout);
      fab = (FloatingActionButton) findViewById(R.id.floatingPlayButton);
      collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
  
      title = (TextView) findViewById(R.id.title);
      artistTextView = (TextView) findViewById(R.id.artist);
      previous = (ImageButton) findViewById(R.id.notification_base_previous);
      playPause = (ImageButton) findViewById(R.id.notification_base_play);
      next = (ImageButton) findViewById(R.id.notification_base_next);
      artwork = (ImageView) findViewById(R.id.notification_base_image);
      miniPlayer = (LinearLayout) findViewById(R.id.mini_player);
  
      collapsingToolbarLayout.setTitle(album.getTitle());
      collapsingToolbarLayout.setExpandedTitleColor(getResources().getColor(android.R.color.transparent));
  
      owner.setText(album.getArtist());
      name.setText(album.getTitle());
  
      fab.setOnClickListener(this);
      fab.setRippleColor(getResources().getColor(R.color.app_theme_dark));
  
      miniPlayer.setOnClickListener(this);
      previous.setOnClickListener(this);
      next.setOnClickListener(this);
      playPause.setOnClickListener(this);
  
      expandableHeightListView.setExpanded(true);
      expandableHeightListView.setOnItemClickListener(this);
  
      if (album.getAlbumArt().length() != 0)
          Picasso.with(this).load(album.getAlbumArt()).into(target);
      else
          Picasso.with(this).load(R.drawable.no_cover).into(target);
  
      if (NakedGroove.isPlaying() || NakedGroove.isPaused()) {
          miniPlayer.setVisibility(View.VISIBLE);
          togglePlayButtonState();
      } else {
          miniPlayer.setVisibility(View.GONE);
      }
  }
  
  private void setStatusBarColor() {
      Window window = getWindow();
      if (Build.VERSION.SDK_INT &gt;= 19 &amp;&amp; Build.VERSION.SDK_INT &lt; 21)
          window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
      if (Build.VERSION.SDK_INT &gt;= 21)
          getWindow().setStatusBarColor(getResources().getColor(android.R.color.transparent));
  }
  
  private void fetchAlbumTracks(String id) {
      startService(new Intent(this, RefresherService.class).setAction(RefresherService.FETCH_ALBUM_TRACKS).putExtra(RefresherService.ALBUM_ID, id));
  }
  
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
          case android.R.id.home:
              super.onBackPressed();
              return true;
          default:
              return super.onOptionsItemSelected(item);
      }
  }
  
  @Override
  public void onPause() {
      super.onPause();
  }
  
  @Override
  protected void onResume() {
      super.onResume();
  
      togglePlayButtonState();
  
      if (NakedGroove.getMediaType() != null &amp;&amp; !NakedGroove.getMediaType().equals(NakedGroove.NOTHING)) {
          updateViews();
      }
  }
  
  @Override
  public void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      outState.putString(ALBUM, album.getTitle());
  }
  
  @Override
  public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {
      NakedGroove.setCurrentPlaylist(trackList);
      NakedGroove.setCurrentIndex(position);
  
      if (Build.VERSION.SDK_INT &gt;= 16)
          startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_URL));
      else
          startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_URL));
  }
  
  private void playPauseMusic() {
      if (NakedGroove.isPlaying()) {
          if (Build.VERSION.SDK_INT &gt;= 16)
              startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_PAUSE));
          else
              startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_PAUSE));
      } else {
          if (Build.VERSION.SDK_INT &gt;= 16)
              startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_PLAY));
          else
              startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_PLAY));
      }
  }
  
  @Override
  public void onClick(View view) {
      switch (view.getId()) {
          case R.id.mini_player:
              startActivity(new Intent(this, MusicPlayer.class));
              break;
          case R.id.notification_base_play:
              playPauseMusic();
              break;
          case R.id.notification_base_next:
              if (Build.VERSION.SDK_INT &gt;= 16)
                  startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_SKIP));
              else
                  startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_SKIP));
              break;
          case R.id.notification_base_previous:
              if (Build.VERSION.SDK_INT &gt;= 16)
                  startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_PREVIOUS));
              else
                  startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_PREVIOUS));
              break;
          case R.id.floatingPlayButton:
              if (trackList.size() != 0) {
                  NakedGroove.setCurrentPlaylist(trackList);
                  NakedGroove.setCurrentIndex(0);
  
                  if (Build.VERSION.SDK_INT &gt;= 16)
                      startService(new Intent(this, PlayerService.class).setAction(PlayerService.ACTION_URL));
                  else
                      startService(new Intent(this, MusicService.class).setAction(MusicService.ACTION_URL));
              }
              break;
      }
  }
  
  private void togglePlayButtonState() {
      if (playing) {
          playPause.setImageResource(R.drawable.ic_music_pause);
      } else {
          playPause.setImageResource(R.drawable.ic_music_play);
      }
  }
  
  private void initActivityTransitions() {
      if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) {
          ChangeBounds transition = new ChangeBounds();
          transition.excludeTarget(android.R.id.statusBarBackground, true);
          getWindow().setEnterTransition(transition);
          getWindow().setReturnTransition(transition);
      }
  }
  
  @Override
  protected void attachBaseContext(Context newBase) {
      super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
  }
  
  @Override
  protected void onStart() {
      super.onStart();
      EventBus.getDefault().register(this);
  }
  
  @Override
  protected void onStop() {
      EventBus.getDefault().unregister(this);
      super.onStop();
  }
  
  private void setColors(Bitmap bitmap) {
      Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
          @Override
          public void onGenerated(Palette palette) {
              if (palette.getVibrantSwatch() != null) {
                  Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
                  float[] vibrant = vibrantSwatch.getHsl();
  
                  nestedScrollView.setBackgroundColor(Color.HSVToColor(vibrant));
                  layout.setBackgroundColor(Color.HSVToColor(vibrant));
                  collapsingToolbarLayout.setContentScrimColor(Color.HSVToColor(vibrant));
                  collapsingToolbarLayout.setStatusBarScrimColor(Color.HSVToColor(vibrant));
              } else if (palette.getDarkVibrantSwatch() != null) {
                  Palette.Swatch darkVibrantSwatch = palette.getDarkVibrantSwatch();
                  float[] darkVibrant = darkVibrantSwatch.getHsl();
  
                  nestedScrollView.setBackgroundColor(Color.HSVToColor(darkVibrant));
                  layout.setBackgroundColor(Color.HSVToColor(darkVibrant));
                  collapsingToolbarLayout.setContentScrimColor(Color.HSVToColor(darkVibrant));
                  collapsingToolbarLayout.setStatusBarScrimColor(Color.HSVToColor(darkVibrant));
              } else if (palette.getDarkMutedSwatch() != null) {
                  Palette.Swatch darkMutedSwatch = palette.getDarkMutedSwatch();
                  float[] darkMuted = darkMutedSwatch.getHsl();
  
                  nestedScrollView.setBackgroundColor(Color.HSVToColor(darkMuted));
                  layout.setBackgroundColor(Color.HSVToColor(darkMuted));
                  collapsingToolbarLayout.setContentScrimColor(Color.HSVToColor(darkMuted));
                  collapsingToolbarLayout.setStatusBarScrimColor(Color.HSVToColor(darkMuted));
              } else {
                  nestedScrollView.setBackgroundColor(getResources().getColor(R.color.DeepGrey));
                  layout.setBackgroundColor(getResources().getColor(R.color.DeepGrey));
                  collapsingToolbarLayout.setContentScrimColor(getResources().getColor(R.color.DeepGrey));
                  collapsingToolbarLayout.setStatusBarScrimColor(getResources().getColor(R.color.DeepGrey));
              }
  
              supportStartPostponedEnterTransition();
          }
      });
  }
  </code></pre>
  
  <p>}</p>