Ich versuche, Material Design für meine App mithilfe dieser Methode zu erhalten .
Immer wenn ich die App starte, wird der folgende Fehler angezeigt:
Fehler beim Aufblasen der Klasse android.support.v7.widget.Toolbar.
Ich habe überprüft, ob ich den Appcompat richtig hinzugefügt habe. Aber es ist alles richtig für mich. Also sag mir bitte, was mache ich falsch?
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)
BEARBEITEN
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>
android
android-appcompat
material-design
AruLNadhaN
quelle
quelle
Antworten:
Wenn Sie neue Androidx- Implementierungen verwenden und die Symbolleiste eingeben, wird sie vom Studio automatisch vervollständigt.
android.support.v7.widget.Toolbar
Sie sollten sie jedochandroidx.appcompat.widget.Toolbar
stattdessen verwenden, da sonst dieser Fehler angezeigt wird.quelle
Tut mir leid, Leute. Ich habe dieses Problem vor langer Zeit gelöst. Ich habe viele Änderungen vorgenommen. Ich kann also nicht herausfinden, wer den Trick macht.
Ich habe die ID geändert, wie von Jared Burrows vorgeschlagen.
Meine Support-Bibliothek wurde entfernt, mein Projekt bereinigt und erneut hinzugefügt.
Gehen Sie zu Datei -> Caches ungültig machen / neu starten.
Hoffe, es funktioniert.
So sieht mein Code jetzt aus
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>
quelle
@dimen/abc_action_bar_default_height_material
ist als privat markiert. Nur eine Warnung, die ignoriert werden kann?Dies passierte mir, als ich versuchte, meinen älteren Code in neuem Android mit AndroidX-Implementierungen zu verwenden. Ändern Sie Ihre XML-Definition in;
<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" />
dann in Ihrem Java-Code;
import androidx.appcompat.widget.Toolbar;
quelle
Ich konnte dieses Problem lösen, indem ich Folgendes ersetzte:
Ersetzen Sie im Symbolleistenlayout alles, was so aussieht:
android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary"
mit
android:minHeight="@dimen/abc_action_bar_default_height_material" android:background="@color/myColor"
quelle
Ich habe dieses Problem durch diesen Blog gelöst: http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
Das Problem ist, dass Sie das falsche Thema verwenden. Sie können ein Thema auswählen, das Theme.AppCompat.NoActionBar ähnelt. In meinem Projekt funktioniert es.
Ich hoffe Dir zu helfen.
quelle
Ich hatte das gleiche Problem wie bei der Verwendung der 23.2.0-Version von AppCompat Library. Ich habe die Suppport-Bibliothek auf 23.2.1 aktualisiert und das Problem wurde behoben.
Dieses Problem mit der Symbolleiste wurde in 23.2.1 behoben
quelle
Bitte lesen Sie diesen Google Blog-Beitrag: 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" />
Außerdem geben Sie ihm zweimal dieselbe "ID". Entfernen Sie die "ID" aus Ihrem Include:
<include android:id="@+id/toolbar" layout="@layout/toolbar" />
quelle
Ich habe das gleiche Problem, aber das war, nachdem ich auf aktualisiert hatte
appcompatv23.2.0
. Ich habe alle oben genannten Vorschläge ausprobiert, aber es funktioniert nicht. Dann ging ich zu meiner Gradle-Datei und ersetzte:dependencies { compile 'com.android.support:appcompat-v7:23.2.0’ compile 'com.android.support:design:23.2.0'
}}
mit:
dependencies { compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' }
Erstellen Sie das Projekt neu und das Problem war behoben. Es könnte ein Problem mit App Compact v2.3.2.0 sein, hoffentlich eine bessere Lösung, damit wir mit dem neuen Update arbeiten können.
Hoffe das hilft. Vielen Dank.
quelle
compile 'com.android.support:design:23.0.1'
Dieser Code löste mein ProblemIch habe dieses Problem behoben, indem ich die Datei app build.gradle geändert habe.
Für Gradle Plugin 2.0+
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
Für Gradle Plugin 1.5
android { defaultConfig { generatedDensities = [] } aaptOptions { additionalParameters "--no-version-vectors" } }
quelle
Ich weiß, dass dies eine alte Frage ist, aber ich bin kürzlich auf dasselbe Problem gestoßen. Es endete als Proguard-Problem (als ich mich darauf einstellte
minifyEnabled
,false
hörte es auf zu passieren.)Um dies zu stoppen, habe ich bei aktiviertem Proguard Folgendes zu meiner Proguard-Regeldatei hinzugefügt, dank einer Lösung, die ich an anderer Stelle gefunden habe (nachdem ich festgestellt habe, dass das Problem Proguard ist).
-dontwarn android.support.v7.** -keep class android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
Ich bin mir nicht sicher, ob sie notwendig sind, aber ich habe auch folgende Zeilen hinzugefügt:
-keep class com.google.** { *; } -keep interface com.google.** { *; }
quelle
Ich hatte das gleiche Problem. Lösung, die für mich funktioniert hat. Wenn Sie v7.Toolbar verwenden, müssen Sie ein von Theme.AppCompat erweitertes Thema verwenden. * Sie können kein von android: Theme.Material. * Erweitertes Thema verwenden, da sie unterschiedliche Stilattribute haben.
Hoffe es wird hilfreich sein.
quelle
Ich habe diese Zeilen wie folgt entfernt:
Vor :
<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" >
nach :
<android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentTop="true" >
Anstelle von "@ attr / actionBarSize" setzen Sie bestimmte Dimensionen, es funktioniert für mich.
quelle
Um dieses Problem zu beheben. Zuerst müssen Sie die neueste android-support-v7-appcompat aus dem \ sdk \ extras \ android \ support hinzufügen
Das funktioniert bei mir und ich werde Ihnen dringend empfehlen, Android Studio zu verwenden.
quelle
Dies funktionierte für mich: Fügen Sie dem Gradle die Kompilierung 'com.android.support:appcompat-v7:21.0.3' hinzu. Ändern Sie das SDK-Ziel auf 21. Hoffe, es funktioniert für Sie!
quelle
Für mich hat es funktioniert, nachdem ich:
quelle
Keine der oben genannten Lösungen hat bei mir funktioniert.
Ich hatte keine Symbolleiste in meinem Projekt, habe aber den gleichen Fehler erhalten.
Ich habe das Projekt aufgeräumt und die App deinstalliert. Dann habe ich einen gradlew build --refresh-dependencies ausgeführt und festgestellt, dass es einige Onclick-Ereignisse ohne entsprechenden Code in den XML-Dateien gibt.
Ich habe sie entfernt, das Projekt neu aufgebaut und es hat funktioniert.
Die Abhängigkeiten schienen nicht aktualisiert worden zu sein, aber das ist eine andere Geschichte.
quelle
Im Fall von Xamarin in VS müssen Sie hinzufügen
Theme = "@style/MyThemesss"
zu youractivity.cs.
Ich füge das hinzu und gehe weiter.
quelle
In meinem Fall wurde dieser Fehler in der Inflationsausnahme in Imageview, in den niedrigeren Versionen und im Lollipop-Betriebssystem angezeigt.
Ich habe diese Ausnahme behoben, als alle Bilddateien im zeichnbaren v-24-Ordner in den zeichnbaren Ordner verschoben wurden.
quelle
Ich hatte Probleme mit der Symbolleiste in einem RelativeLayout. Versuchen Sie es mit LinearLayout. Wenn Sie die Symbolleiste überlagern möchten, versuchen Sie Folgendes:
<RelativeLayout> <LinearLayout> --INCLUDE tOOLBAR-- </LinearLayout> <Button></Button> </RelativeLayout>
Ich verstehe nicht warum, aber es funktioniert bei mir.
quelle
Es ist unklar, warum dieser Fehler bei mir passiert ist, aber ich habe ihn gelöst. Ich habe das gleiche Layout verwendet, Inline oder Include. Beide verursachen NPE-Fehler. Ich denke, es ist kein Layoutproblem.
Ich hatte eine abstrakte Klasse namens BaseActivity erweitert ActionBarActivity, die die Methode initActionBar () haben. Ich überschreibe und rufe diese Methode in OnCreate der untergeordneten Klasse auf. So ähnlich:
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); }
Ich hatte NPE-Fehler mit dem oben genannten Code. Ich weiß nicht, warum ich falsch bin. Ich löse nach unten Code und es sieht gleich aus .
@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(); }
quelle
In meinem Fall bestand ein Problem beim Aufrufen von inflater.inflate (R.layout.some_layout, null). Null als ViewGroup-Parameter war das Problem.
quelle
Die Lösung für das Problem wurde für mich im XML-Dokument für meine Hauptaktivität gefunden. Ursprünglich war meine Symbolleiste
<android.support.v7.widget.Toolbar
. Um dies zu beheben, habe ich es in geändert<android.widget.Toolbar
. Ich weiß allerdings nicht, warum das funktioniert hat. Hat jemand einen Einblick warum?quelle
Problem war für Pre-Lolipop-Geräte. Ich konnte dieses Problem lösen, indem ich Folgendes ersetzte:
Ersetzen Sie im Symbolleistenlayout alles, was so aussieht:
android:layout_height="?android:attr/actionBarSize" android:background="?android:attr/colorPrimary"
mit
android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"
quelle
Für mich war der Fehler, dass ich hatte:
<android:support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/>
anstatt:
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/>
Insbesondere hatte ich in der ersten Zeile einen Doppelpunkt zwischen "Android" und "Support" anstelle eines Punkts.
quelle