Estoy tratando de obtener Material Design para mi aplicación siguiendo este método .
Siempre que ejecuto la aplicación, muestra el siguiente error:
Error al inflar la clase android.support.v7.widget.Toolbar.
Verifiqué si había agregado el appcompat correctamente. Pero todo es correcto para mí. Entonces, por favor, dime ¿qué estoy haciendo 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)
EDITAR
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
fuente
fuente
Respuestas:
Si está utilizando nuevas implementaciones de androidx , al escribir la barra de herramientas, Studio lo completará automáticamente
android.support.v7.widget.Toolbar
, pero debe usarandroidx.appcompat.widget.Toolbar
en su lugar, de lo contrario, obtendrá este error.fuente
Lo siento chicos. He resuelto este problema hace mucho tiempo. Hice muchos cambios. Entonces no puedo averiguar cuál hace el truco.
He cambiado la identificación según lo sugerido por Jared Burrows.
Eliminé mi biblioteca de soporte, limpié mi proyecto y Re lo agregó.
Vaya a Archivo -> Invalidar cachés / Reiniciar.
Espero que funcione.
Así es como se ve mi código ahora
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>
fuente
@dimen/abc_action_bar_default_height_material
está marcado como privado. ¿Solo una advertencia que puede ignorarse?Esto me sucedió cuando intenté usar mi código anterior en un nuevo Android con implementaciones de androidx. cambie su definición XML a;
<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" />
luego en su código java;
import androidx.appcompat.widget.Toolbar;
fuente
Pude resolver este problema reemplazando lo siguiente:
En el diseño de la barra de herramientas, reemplace todo lo que sea así:
android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary"
con
android:minHeight="@dimen/abc_action_bar_default_height_material" android:background="@color/myColor"
fuente
He resuelto este problema con este blog: http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
El problema es que usas el tema incorrecto, puedes elegir un tema como Theme.AppCompat.NoActionBar, en mi proyecto, funciona.
Espero poder ayudarte。
fuente
Tuve el mismo problema que estaba usando la versión 23.2.0 de AppCompat Library. Actualicé la biblioteca de soporte a 23.2.1 y el problema se resolvió.
Este problema de la barra de herramientas se ha resuelto en 23.2.1
fuente
Lea esta publicación del blog de 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" />
Además, le está dando el mismo "ID" dos veces, elimine el "id" de su inclusión:
<include android:id="@+id/toolbar" layout="@layout/toolbar" />
fuente
Me enfrento al mismo problema, pero eso fue después de haber actualizado a
appcompatv23.2.0
. Intenté todas las sugerencias anteriores pero no funcionó. Luego procedí a mi archivo Gradle y reemplacé:dependencies { compile 'com.android.support:appcompat-v7:23.2.0’ compile 'com.android.support:design:23.2.0'
}
con:
dependencies { compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' }
Reconstruya el proyecto y el problema desapareció. Podría ser un problema con la aplicación compacta v23.2.0, ojalá se presente una solución mejor para que podamos trabajar con la nueva actualización.
Espero que esto ayude. Gracias.
fuente
compile 'com.android.support:design:23.0.1'
este código resolvió mi problemaHe solucionado este problema modificando el archivo build.gradle de la aplicación.
Para el complemento de Gradle 2.0+
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
Para el complemento de Gradle 1.5
android { defaultConfig { generatedDensities = [] } aaptOptions { additionalParameters "--no-version-vectors" } }
fuente
Sé que esta es una pregunta antigua, pero recientemente me encontré con el mismo problema. Se terminó siendo un problema Proguard (cuando me puse
minifyEnabled
afalse
que se detuvo sucediendo.)Para detenerlo, con proguard habilitado, agregué lo siguiente a mi archivo de reglas de proguard, gracias a una solución que encontré en otro lugar (después de descubrir que el problema era proguard)
-dontwarn android.support.v7.** -keep class android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
No estoy seguro de si son necesarios, pero también agregué estas líneas:
-keep class com.google.** { *; } -keep interface com.google.** { *; }
fuente
Me enfrenté al mismo problema. Solución que funcionó para mí. Si usa v7.Toolbar, debe usar el tema extendido de Theme.AppCompat. * No puede usar el tema extendido de Android: Theme.Material. * Porque tienen diferentes atributos de estilo.
Espero que te sea de ayuda.
fuente
Eliminé estas líneas de la siguiente manera:
antes de :
<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" >
después :
<android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentTop="true" >
En lugar de "@ attr / actionBarSize", ponga una dimensión específica que me funciona.
fuente
Para solucionar este problema. primero debe agregar latestandroid-support-v7-appcompat desde \ sdk \ extras \ android \ support
Eso funciona para mí y te recomiendo encarecidamente que uses Android Studio.
fuente
Esto funcionó para mí: agregue la compilación 'com.android.support:appcompat-v7:21.0.3' al gradle. Cambie el objetivo sdk a 21. ¡Espero que funcione para usted!
fuente
Para mí funcionó después de que lo hice:
fuente
Ninguna de las soluciones anteriores funcionó para mí.
No tenía una barra de herramientas en mi proyecto, pero obtuve el mismo error.
Limpié el proyecto, desinstalé la aplicación. Luego ejecuté una compilación gradlew --refresh-dependencies, y descubrí que había algunos eventos onclick sin el código correspondiente en los archivos xml.
Los eliminé, reconstruí el proyecto y funcionó.
Las dependencias no parecían actualizadas, pero esa es otra historia.
fuente
En el caso de Xamarin en VS, debe agregar
Theme = "@style/MyThemesss"
a su actividad.cs.
Añado esto y sigo.
fuente
En mi caso, recibí este error en la excepción de inflación en Imageview, en las versiones inferiores y el sistema operativo lollipop.
Resolví esta excepción al mover todos los archivos de imagen en la carpeta v-24 dibujable a la carpeta dibujable.
fuente
Tuve problemas para incluir la barra de herramientas en un RelativeLayout, intente con LinearLayout. Si desea superponer la barra de herramientas, intente con:
<RelativeLayout> <LinearLayout> --INCLUDE tOOLBAR-- </LinearLayout> <Button></Button> </RelativeLayout>
No entiendo por qué, pero me funciona.
fuente
No está claro por qué sucedió este error conmigo, pero lo resolví. Usé el mismo diseño, en línea o usando incluir, ambos causan un error NPE. Así que creo que no es un problema de diseño.
Tuve una llamada de clase abstracta BaseActivity extiende ActionBarActivity que tiene el método initActionBar (). Anulo y llamo a este método en OnCreate de la clase secundaria. Algo como eso:
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); }
TENÍA UN ERROR NPE CON EL CÓDIGO ANTERIOR. No sé por qué me equivoco. RESUELVO POR EL CÓDIGO A CONTINUACIÓN Y ES MISMO
@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(); }
fuente
En mi caso, un problema fue llamar a inflater.inflate (R.layout.some_layout, null). Nulo como parámetro ViewGroup fue el problema.
fuente
La solución al problema para mí se encontró en el documento XML de mi actividad principal. Originalmente mi barra de herramientas era
<android.support.v7.widget.Toolbar
. Para resolver esto, lo cambié a<android.widget.Toolbar
. Aunque no sé por qué funcionó esto. ¿Alguien tiene alguna idea de por qué?fuente
El problema era para los dispositivos pre-lolipop. Pude resolver este problema reemplazando lo siguiente:
En el diseño de la barra de herramientas, reemplace todo lo que sea así:
android:layout_height="?android:attr/actionBarSize" android:background="?android:attr/colorPrimary"
con
android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"
fuente
Para mí, el error fue que tenía:
<android:support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/>
en vez de:
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/>
Específicamente, tenía dos puntos entre "android" y "soporte" en la primera línea en lugar de un punto.
fuente