Erreur De Gonfler CollapsingToolbarLayout
J'ai récemment mis à jour la conception de l'appui de la bibliothèque à la dernière version et maintenant, chaque activité a un CollapsingToolbarLayout
jette l'exception suivante:
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)
L'erreur totale journal se présente comme suit:
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.<init>(CollapsingToolbarLayout.java:197)
at android.support.design.widget.CollapsingToolbarLayout.<init>(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)
Je ne peux pas l'air de trouver quel est le problème...
Le fichier de mise en page est:
`
<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">
<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">
<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" />
<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" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<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" />
<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<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">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dip">
<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" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/owner"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="#e2e2e2" />
</LinearLayout>
</android.support.v7.widget.CardView>
<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" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</RelativeLayout>
<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" />
<include layout="@layout/mini_player" />
`
Le code de l'activité est:
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<Track> 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 >= 19 && Build.VERSION.SDK_INT < 21)
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (Build.VERSION.SDK_INT >= 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 && !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<?> parent, View view, int position, long id) {
NakedGroove.setCurrentPlaylist(trackList);
NakedGroove.setCurrentIndex(position);
if (Build.VERSION.SDK_INT >= 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 >= 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 >= 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 >= 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 >= 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 >= 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 >= 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();
}
});
}
}
- Lors de la première modification à votre question .
- postez votre fichier de mise en page
- Fournir de l'Activité ou du Fragment de ce crash est survenu.
InformationsquelleAutor Alex Kombo | 2016-05-23
Vous devez vous connecter pour publier un commentaire.
J'ai répondu à un poste similaire ici Erreur de gonflage de classe CollapsingToolbarLayout
Je sais qu'il est accepté comme réponse, MAIS ça ne fonctionne pas (ou ne fonctionne plus).
J'ai passer quelques heures de recherche sur cette erreur, ce que j'ai trouvé est celle-ci.
Tout d'abord, en raison initiale de la version d'Android, Nougat, également connu sous Android 7.0 (API 24) compileSdkVersion 24 est désormais disponible. Pour cela, vous devez mettre à jour votre kit de développement. Étape 1
Deuxième, est de mettre à jour votre gradle fichiers (connexion internet requise). Étape 2
Également mettre à Jour cette partie de l'application.gradle
Troisième (en option) Nettoyage de Projet, Projet de construction d' (à la Fois en vertu de l'Onglet Build)
J'espère que cela aide quelqu'un là-bas et d'économiser quelques heures de recherches.
Cheers /codage Heureux
Espère que cela aide.
Trouvé la solution. Juste ajouter
à votre CollapsingToolbarLayout
S'avère que j'avais une autre dépendance qui a eu un conflit soutien de la bibliothèque. Quand j'ai enlevé la dépendance, le projet a construit et exécuté avec succès.
Essayez de mettre à jour l'ensemble de vos bibliothèques de prise en charge de la
24.0.0-beta1
version. Puisclean
,rebuild
etrun
votre projet de nouveau. Qui je l'espère devrait résoudre votre problème.app:contentScrim="?attr/colorPrimary"
de votre XML, comme par cette question.Essayez de mettre à jour un
com.android.support:design
dépendance à la même version que les autres bibliothèques de prise en charge.Je viens de réglé ce problème dans mon propre projet. Je n'ai pas l'ajouter explicitement dans mon construire.gradle depuis que j'ai utiliser une bibliothèque qui utilise soutien-bibliothèque de conception. Gradle tâche
androidDependencies
a montré que la conception de soutien avait encore de la version la plus basse après la mise à jour des autres bibliothèques, j'ai donc ajouté explicitement et il a travaillé comme un charme.