J'essaie d'obtenir Material Design pour mon application en suivant cette méthode .
Chaque fois que je lance l'application, l'erreur suivante s'affiche:
Erreur lors du gonflage de la classe Android.support.v7.widget.Toolbar.
J'ai vérifié si j'ai bien ajouté l'appcompat. Mais tout est correct pour moi. Alors s'il vous plaît dites-moi ce que je fais mal?
build.gradle
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 21
buildToolsVersion '21.0.2'
defaultConfig {
applicationId "io.bxbxbai.feedlistviewdemo"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles 'proguard-rules.pro'
}
}
}
configurations {
all*.exclude group: 'com.Android.support', module: 'support-v4'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':materialDesign')
compile 'com.balysv.materialmenu:material-menu:1.4.0'
compile 'com.Android.support:appcompat-v7:21.+'
}
Logcat
02:11.641 20583-20583/io.bxbxbai.feedlistviewdemo E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: io.bxbxbai.feedlistviewdemo, PID: 20583
Java.lang.RuntimeException: Unable to start activity ComponentInfo{io.bxbxbai.feedlistviewdemo/io.bxbxbai.androiddemos.MainActivity}: Android.view.InflateException: Binary XML file line #3: Error inflating class Android.support.v7.widget.Toolbar
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2224)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2283)
at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1205)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5158)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:796)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:612)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Android.view.InflateException: Binary XML file line #3: Error inflating class Android.support.v7.widget.Toolbar
at Android.view.LayoutInflater.createView(LayoutInflater.Java:620)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:696)
at Android.view.LayoutInflater.parseInclude(LayoutInflater.Java:816)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:745)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:492)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:397)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:353)
at Android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.Java:228)
at Android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.Java:102)
at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:6144)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1087)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2181)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2283)
at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1205)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5158)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:796)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:612)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.reflect.InvocationTargetException
at Java.lang.reflect.Constructor.constructNative(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:594)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:696)
at Android.view.LayoutInflater.parseInclude(LayoutInflater.Java:816)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:745)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:492)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:397)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:353)
at Android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.Java:228)
at Android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.Java:102)
at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:6144)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1087)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2181)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2283)
at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1205)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5158)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:796)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:612)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.NoSuchMethodError: Android.support.v4.content.ContextCompat.getDrawable
at Android.support.v7.internal.widget.TintManager.getDrawable(TintManager.Java:133)
at Android.support.v7.internal.widget.TintTypedArray.getDrawable(TintTypedArray.Java:62)
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:248)
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:190)
at Java.lang.reflect.Constructor.constructNative(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:594)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:696)
at Android.view.LayoutInflater.parseInclude(LayoutInflater.Java:816)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:745)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:492)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:397)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:353)
at Android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.Java:228)
at Android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.Java:102)
at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:6144)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1087)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2181)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2283)
at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1205)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5158)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:796)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:612)
at dalvik.system.NativeStart.main(Native Method)
MODIFIER
toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimaryDark"/>
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame">
<include Android:id="@+id/toolbar" layout="@layout/toolbar" />
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/btn_feed_list_demo"
Android:text="@string/feed_list_demo"/>
</RelativeLayout>
Désolé les gars. J'ai résolu ce problème il y a longtemps. J'ai fait beaucoup de changements. Donc, je ne peux pas savoir lequel fait le tour.
J'ai changé l'identifiant comme suggéré par Jared Burrows.
Retiré ma bibliothèque de support et nettoyé mon projet et Re l'a ajouté.
Allez dans Fichier -> Invalider les caches/redémarrer.
Esperons que ça marche.
Voici à quoi ressemble mon code
activity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<include
Android:id="@+id/toolbar_actionbar"
layout="@layout/toolbar_default"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
<Android.support.v4.widget.DrawerLayout
Android:id="@+id/drawer"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_below="@+id/toolbar_actionbar">
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<fragment
Android:id="@+id/fragment_drawer"
Android:name="com.arul.anahy.drawer.NavigationDrawerFragment"
Android:layout_width="@dimen/navigation_drawer_width"
Android:layout_height="match_parent"
Android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"/>
</Android.support.v4.widget.DrawerLayout>
</RelativeLayout>
toolbar_default.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
style="@style/ToolBarStyle"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimary"
Android:minHeight="@dimen/abc_action_bar_default_height_material"/>
ToolBarStyle
<style name="ToolBarStyle" parent="">
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
J'ai pu résoudre ce problème en remplaçant le texte suivant:
Dans la présentation de la barre d’outils, remplacez tout ce qui ressemble à ceci:
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
avec
Android:minHeight="@dimen/abc_action_bar_default_height_material"
Android:background="@color/myColor"
J'ai résolu ce problème par ce blog: http://Android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
Le problème est que vous utilisez le mauvais thème, vous pouvez choisir un thème qui, comme Theme.AppCompat.NoActionBar, fonctionne dans mon projet.
J'espère vous aider
J'ai eu le même problème car j'utilisais la version 23.2.0 de AppCompat Library. J'ai mis à jour la bibliothèque de support à 23.2.1 et le problème a été résolu.
Ce problème de la barre d’outils a été résolu en 23.2.1
Veuillez lire cet article du blog Google: http://Android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_awesome_toolbar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary" />
En outre, vous lui donnez le même "ID" deux fois, veuillez supprimer l'ID "de votre include:
<include Android:id="@+id/toolbar" layout="@layout/toolbar" />
Si vous utilisez les nouvelles implémentations androidx , lors de la saisie de Toolbar, Studio le complétera automatiquement en Android.support.v7.widget.Toolbar
, mais vous devrez plutôt utiliser androidx.appcompat.widget.Toolbar
, sinon vous obtiendrez cette erreur.
J'ai résolu ce problème en modifiant le fichier build.gradle de l'application.
Pour Gradle Plugin 2.0+
Android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Pour Gradle Plugin 1.5
Android {
defaultConfig {
generatedDensities = []
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
Je suis confronté au même problème, mais c'était après avoir mis à jour appcompatv23.2.0
. J'ai essayé toutes les suggestions ci-dessus, mais ça marche. Ensuite, j'ai procédé à mon fichier Gradle et remplacé:
dependencies {
compile 'com.Android.support:appcompat-v7:23.2.0’
compile 'com.Android.support:design:23.2.0'
}
avec:
dependencies {
compile 'com.Android.support:appcompat-v7:23.0.1'
compile 'com.Android.support:design:23.0.1'
}
Reconstruisez le projet et le problème avait disparu. Cela pourrait être un problème avec app compact v23.2.0, nous espérons une meilleure solution pour que nous puissions travailler avec la nouvelle mise à jour.
J'espère que ça aide ... Merci.
Cela m'est arrivé lorsque j'ai essayé d'utiliser mon ancien code dans le nouvel Android avec des implémentations Android. changez votre définition XML en;
<androidx.appcompat.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:titleTextColor="@Android:color/white" />
puis dans votre code Java;
import androidx.appcompat.widget.Toolbar;
Je sais que c'est une vieille question, mais j'ai récemment rencontré le même problème. Cela a fini par être un problème de Proguard (lorsque j'ai défini minifyEnabled
sur false
, cela a cessé de se produire.)
Pour l'arrêter, avec proguard activé, j'ai ajouté ce qui suit à mon fichier de règles proguard, grâce à une solution trouvée ailleurs (après avoir découvert que le problème était proguard)
-dontwarn Android.support.v7.**
-keep class Android.support.v7.** { *; }
-keep interface Android.support.v7.** { *; }
Je ne sais pas s'ils sont nécessaires, mais j'ai aussi ajouté ces lignes:
-keep class com.google.** { *; }
-keep interface com.google.** { *; }
Cela a fonctionné pour moi: Ajouter compilez 'com.Android.support:appcompat-v7:21.0.3' dans le dégradé. Modifiez la cible sdk en 21. J'espère que cela fonctionne pour vous!
J'ai rencontré le même problème. Solution qui a fonctionné pour moi. Si vous utilisez v7.Toolbar, vous devez utiliser le thème étendu à partir de Theme.AppCompat. * Vous ne pouvez pas utiliser le thème étendu à partir d'Android: Theme.Material. * Car ils ont des attributs de style différents.
J'espère que ça vous sera utile.
Pour moi, cela a fonctionné après moi:
Pour résoudre ce problème, vous devez d'abord ajouter latestandroid-support-v7-appcompat à partir du répertoire\sdk\extras\Android\support.
Cela fonctionne pour moi et je vous recommande fortement d'utiliser Android Studio.
Dans mon cas, je recevais cette erreur dans une exception d'inflation sur Imageview, dans les versions inférieures et Lollipop OS.
J'ai résolu cette exception lors du déplacement de tous les fichiers image du dossier drawable v-24 vers le dossier drawable.
Aucune des solutions ci-dessus n'a fonctionné pour moi.
Je n'avais pas de barre d'outils dans mon projet, mais j'ai eu la même erreur.
J'ai nettoyé le projet, désinstallé l'application . Ensuite, j'ai exécuté une gradlew build --refresh-dependencies et découvert qu'il y avait des événements onclick sans code correspondant dans les fichiers xml.
Je les ai supprimés, j'ai reconstruit le projet et cela a fonctionné.
Les dépendances ne semblaient pas avoir été mises à jour, mais c'est une autre histoire.
La raison pour laquelle cette erreur s’est produite avec moi n’est pas claire, mais j’ai résolu le problème. J'ai utilisé la même disposition, en ligne ou en utilisant include, les deux provoquant une erreur NPE. Donc, je pense que ce n'est pas un problème de mise en page.
J'ai eu un appel de classe abstrait BaseActivity étend ActionBarActivity qui ont la méthode initActionBar (). Je substitue et appelle cette méthode dans OnCreate de la classe enfant. Quelque chose comme ca:
Android.support.v7.app.ActionBar mActionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_appointment);
// Inject View using ButterKnife
ButterKnife.inject(this);
// Init toolbar & status bar
initActionBar();
}
@Override
protected void initActionBar() {
super.initActionBar();
setSupportActionBar(mToolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mActionBar = getSupportActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
}
J'avais une erreur NPE avec le code ci-dessus. Je ne sais pas pourquoi je me trompe. Je résous par code ci-dessous et c'est pareil.
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_appointment);
ButterKnife.inject(this);
setSupportActionBar(mToolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mActionBar = getSupportActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
initActionBar();
}
@Override
protected void initActionBar() {
super.initActionBar();
}
La solution au problème pour moi a été trouvée dans le document XML de mon activité principale. À l'origine, ma barre d'outils était <Android.support.v7.widget.Toolbar
. Pour résoudre ce problème, je l'ai changé en <Android.widget.Toolbar
. Je ne sais pas pourquoi cela a bien fonctionné. Est-ce que quelqu'un a une idée de pourquoi?
Dans le cas de Xamarin dans VS, vous devez ajouter
Theme = "@style/MyThemesss"
à votre activité.cs.
J'ajoute ceci et continue.
J'ai eu des problèmes comprenant la barre d'outils dans un RelativeLayout, essayez avec LinearLayout. Si vous voulez superposer la barre d’outils, essayez avec:
<RelativeLayout>
<LinearLayout>
--INCLUDE tOOLBAR--
</LinearLayout>
<Button></Button>
</RelativeLayout>
Je ne comprends pas pourquoi mais ça marche pour moi.
Pour moi, l'erreur était que j'avais:
<Android:support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"/>
au lieu de:
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"/>
Plus précisément, j'avais deux points entre "Android" et "support" sur la première ligne au lieu d'un point.
J'ai enlevé ces lignes comme ci-dessous:
avant :
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar1"
Android:layout_width="match_parent"
Android:layout_height="@attr/actionBarSize"
Android:minHeight="@attr/actionBarSize"
Android:layout_alignParentTop="true" >
après :
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar1"
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_alignParentTop="true" >
Au lieu de "@ attr/actionBarSize", mettez des valeurs spécifiques, cela fonctionne pour moi.
Le problème concernait les appareils pré-lolipop. J'ai pu résoudre ce problème en remplaçant le texte suivant:
Dans la présentation de la barre d’outils, remplacez tout ce qui ressemble à ceci:
Android:layout_height="?android:attr/actionBarSize"
Android:background="?android:attr/colorPrimary"
avec
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimary"
Dans mon cas, l'appel de inflater.inflate (R.layout.some_layout, null) posait problème. Le paramètre Null as ViewGroup était le problème.