迁移到 AndroidX 后膨胀 class com.google.android.material.navigation.NavigationView 时出错
Error inflating class com.google.android.material.navigation.NavigationView after migration to AndroidX
将我的项目更新为 AndroidX
并将 targetSdkVersion
设置为 28 后,我的项目在从商店安装它以进行 Beta 测试时崩溃。
以下是我收到的错误日志:
2019-07-08 08:28:33.026 32011-32011/? E/AndroidRuntime: FATAL EXCEPTION: main Process: hu.itq.oakprotection, PID: 32011
java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.itq.oakprotection/hu.itq.oakprotection.MainActivity}: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:658)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:801)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:874)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:835)
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 androidx.appcompat.app.AppCompatDelegateImpl.c(Unknown Source:23)
at androidx.appcompat.app.AppCompatActivity.setContentView(Unknown Source:4)
at hu.itq.oakprotection.MainActivity.onCreate(Unknown Source:6)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.NoSuchMethodError: No interface method d()I in class Lorg/xmlpull/v1/XmlPullParser; or its super classes (declaration of 'org.xmlpull.v1.XmlPullParser' appears in /system/framework/core-libart.jar)
at androidx.appcompat.view.SupportMenuInflater.a(Unknown Source:5)
at androidx.appcompat.view.SupportMenuInflater.inflate(Unknown Source:25)
at com.google.android.material.navigation.NavigationView.b(Unknown Source:12)
at com.google.android.material.navigation.NavigationView.<init>(Unknown Source:255)
at com.google.android.material.navigation.NavigationView.<init>(Unknown Source:2)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
以下是我在 build.gradle
文件中的依赖项:
android {
compileSdkVersion 28
def versionMajor = 1
def versionMinor = 0
def versionPatch = 1
def versionBuild = 4 // ezt kell átírni új verzió kirakásakor
defaultConfig {
applicationId "hu.itq.oakprotection"
minSdkVersion 23
targetSdkVersion 28
versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.core:core:1.0.2'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'com.payumoney.sdkui:plug-n-play:1.2.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'androidx.browser:browser:1.0.0'
implementation 'com.google.android.gms:play-services-base:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//Test error miatt kellett
implementation 'androidx.annotation:annotation:1.1.0'
//Aszinkron hálózatokhoz
implementation 'com.android.volley:volley:1.1.1'
//Facebook
implementation 'com.facebook.android:facebook-android-sdk:4.34.0'
//Osm Droid
implementation 'org.osmdroid:osmdroid-android:6.1.0'
implementation 'com.github.MKergall:osmbonuspack:6.4'
implementation 'com.github.angads25:filepicker:1.1.1'
//Tile provider igényli
implementation 'mil.nga.geopackage:geopackage-android:3.0.2'
implementation 'com.j256.ormlite:ormlite-android:5.1'
implementation 'mil.nga.geopackage:geopackage-core:3.0.2'
implementation 'ar.com.hjg:pngj:2.1.0'
implementation 'mil.nga:tiff:2.0.0'
implementation('mil.nga.geopackage:geopackage-android:3.0.2') {
exclude group: 'com.google.android.gms', module: 'play-services'
exclude group: 'com.google.maps.android', module: 'android-maps-utils'
exclude group: 'com.android.support', module: 'support-v13'
}
//Glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
//Mapsforge rendering and database support, which is LGPL
implementation 'org.mapsforge:mapsforge-map-android:0.8.0'
implementation 'org.mapsforge:mapsforge-map:0.8.0'
implementation 'org.mapsforge:mapsforge-themes:0.8.0'
// ExoPlayer
implementation 'com.google.android.exoplayer:exoplayer:2.7.3'
//Youtube
implementation 'com.github.HaarigerHarald:android-youtubeExtractor:v1.7.0'}
activity_main.xml:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
tools:context=".MainActivity">
<include
layout="@layout/app_bar_main" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@color/colorPrimary"
app:itemTextColor="@color/colorPrimary"
android:backgroundTint="@color/colorWhite"/>
</androidx.drawerlayout.widget.DrawerLayout>
为什么我收到 NavigationView
的 android.view.InflateException
错误?
android.view.InflateException:表示您的 XML 文件本身有问题。
请检查您在XML标签中分配的所有尺寸、颜色资源和其他资源。
或者 post 您的 XML 文件在这里。
出现此错误的原因有多种。检查以下内容并确保它们正确:
- 如果您使用的是默认导航,请检查您使用的
com.google.android.material.navigation.NavigationView
中使用的 drawable
和 color
资源的代码,可能在 activity_main.xml
中来自 Android Studio 的抽屉模板代码。
- 检查可绘制文件是否位于
res/drawable
文件夹中,而不是 res/drawable-v21
。
- 检查您是否在
NavigationView
中使用了 android:backgroundTint()
或 android:src
或类似的东西。由于它们在 android API 级别 21 以下不起作用,请改用 app:backgroundTint
或 app:srcCompat
。
您可以检查您的 XML 文件。您的 xml 菜单、导航 header 和其他内容有问题。就我而言,res/menu/menu.xml
错误
对于那些选择的答案没有帮助他们的人,我发现 NavigationView 主题有问题,它应该是 appCompat 主题(至少对我而言)。
创建新样式后:
<style name="NavView" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowNoTitle">true</item>
...
</style>
并在我 mainactivity.xml 的 NavigationView 中将其与 android:theme="@style/NavView" 一起使用,该应用程序现在运行完美。
就我而言,问题出在 navigation.NavigationView app:headerLayout 布局中
我正在设置
<ImageView
app:srcCompat="@mipmap/ic_launcher_round"
/>
问题出在 ic_launcher_round 因为它在文件夹 mipmap-anydpi-v26 中
我正在使用 android 版本 7.1.1,即 API 级别:25
希望这对大家有帮助
在我的例子中,问题是清单文件中的主题值
<activity
android:name=".ui.BarcodeReaderDrawerActivity"
android:label="@string/title_activity_barcode_reader_drawer">
android:theme="@style/AppBaseTheme.NoActionBar"
</activity>
更改于
<activity
android:name=".ui.BarcodeReaderDrawerActivity"
android:label="@string/title_activity_barcode_reader_drawer"
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar">
</activity>
在我的例子中,我手动将 res/drawable-v24
中的所有内容移动到 res/drawable
文件夹,将 res/mipmap-anydpi-v26
中的所有内容手动移动到 res/mipmap-hdpi
并且问题已在具有 Android 的手机中解决5 和 6.
我在升级到Androidx的过程中出现了这个错误,很难找到。问题出在 activity 主题上。
在 styles.xml 中,不知何故我弄错了 android material 主题,导致导航栏无法附加到操作栏。
from:
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
to:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
就我而言,在导航页眉布局中,我的图像太大,不适合屏幕。我更改了那个图标,它 运行.
我尝试更改模块设置、gradle 设置、更改依赖项等等,发现问题出在导航视图上,但问题类型不同,即
为抽屉布局选择的图像溢出 -> 所以只需更改图像或编辑它调整大小然后尝试。
因此,导航视图在某些设备中会引发错误。
此错误与主题有关。我通过评论主题中的以下行解决了我的问题
<style name="AppTheme.NavigationView" >
<!--<item name="android:textColorSecondary">#FFFFFF</item>-->
<item name="android:scrollbarThumbVertical">@android:color/transparent</item>
<item name="elevation">0dp</item>
</style>
通过对主题代码逐行删除或注释,可以快速断定问题出在哪里。
我的问题不是因为 android:src
但是因为我使用了矢量渐变作为背景(android:background="@drawable/bg"
)
内部导航 header 布局
而且这只发生在 Android 6
我从这里更改了向量:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" android:width="200dp" android:height="133dp" android:viewportWidth="375" android:viewportHeight="280">
<path android:pathData="M0 0h375v280H0V0z">
<aapt:attr name="android:fillColor">
<gradient android:endX="497.417" android:endY="263.205" android:startX="150.5" android:startY="-33.5" android:type="linear">
<item android:color="#FFFFFFFF" android:offset="0"/>
<item android:color="#00000000" android:offset="1"/>
</gradient>
</aapt:attr>
</path>
</vector>
至此
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="315"
android:endColor="#ffffff"
android:startColor="#000000"
android:type="linear" />
</shape>
崩溃消失了
将我的项目更新为 AndroidX
并将 targetSdkVersion
设置为 28 后,我的项目在从商店安装它以进行 Beta 测试时崩溃。
以下是我收到的错误日志:
2019-07-08 08:28:33.026 32011-32011/? E/AndroidRuntime: FATAL EXCEPTION: main Process: hu.itq.oakprotection, PID: 32011
java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.itq.oakprotection/hu.itq.oakprotection.MainActivity}: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:658)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:801)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:874)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:835)
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 androidx.appcompat.app.AppCompatDelegateImpl.c(Unknown Source:23)
at androidx.appcompat.app.AppCompatActivity.setContentView(Unknown Source:4)
at hu.itq.oakprotection.MainActivity.onCreate(Unknown Source:6)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.NoSuchMethodError: No interface method d()I in class Lorg/xmlpull/v1/XmlPullParser; or its super classes (declaration of 'org.xmlpull.v1.XmlPullParser' appears in /system/framework/core-libart.jar)
at androidx.appcompat.view.SupportMenuInflater.a(Unknown Source:5)
at androidx.appcompat.view.SupportMenuInflater.inflate(Unknown Source:25)
at com.google.android.material.navigation.NavigationView.b(Unknown Source:12)
at com.google.android.material.navigation.NavigationView.<init>(Unknown Source:255)
at com.google.android.material.navigation.NavigationView.<init>(Unknown Source:2)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
以下是我在 build.gradle
文件中的依赖项:
android {
compileSdkVersion 28
def versionMajor = 1
def versionMinor = 0
def versionPatch = 1
def versionBuild = 4 // ezt kell átírni új verzió kirakásakor
defaultConfig {
applicationId "hu.itq.oakprotection"
minSdkVersion 23
targetSdkVersion 28
versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.core:core:1.0.2'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'com.payumoney.sdkui:plug-n-play:1.2.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'androidx.browser:browser:1.0.0'
implementation 'com.google.android.gms:play-services-base:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//Test error miatt kellett
implementation 'androidx.annotation:annotation:1.1.0'
//Aszinkron hálózatokhoz
implementation 'com.android.volley:volley:1.1.1'
//Facebook
implementation 'com.facebook.android:facebook-android-sdk:4.34.0'
//Osm Droid
implementation 'org.osmdroid:osmdroid-android:6.1.0'
implementation 'com.github.MKergall:osmbonuspack:6.4'
implementation 'com.github.angads25:filepicker:1.1.1'
//Tile provider igényli
implementation 'mil.nga.geopackage:geopackage-android:3.0.2'
implementation 'com.j256.ormlite:ormlite-android:5.1'
implementation 'mil.nga.geopackage:geopackage-core:3.0.2'
implementation 'ar.com.hjg:pngj:2.1.0'
implementation 'mil.nga:tiff:2.0.0'
implementation('mil.nga.geopackage:geopackage-android:3.0.2') {
exclude group: 'com.google.android.gms', module: 'play-services'
exclude group: 'com.google.maps.android', module: 'android-maps-utils'
exclude group: 'com.android.support', module: 'support-v13'
}
//Glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
//Mapsforge rendering and database support, which is LGPL
implementation 'org.mapsforge:mapsforge-map-android:0.8.0'
implementation 'org.mapsforge:mapsforge-map:0.8.0'
implementation 'org.mapsforge:mapsforge-themes:0.8.0'
// ExoPlayer
implementation 'com.google.android.exoplayer:exoplayer:2.7.3'
//Youtube
implementation 'com.github.HaarigerHarald:android-youtubeExtractor:v1.7.0'}
activity_main.xml:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
tools:context=".MainActivity">
<include
layout="@layout/app_bar_main" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@color/colorPrimary"
app:itemTextColor="@color/colorPrimary"
android:backgroundTint="@color/colorWhite"/>
</androidx.drawerlayout.widget.DrawerLayout>
为什么我收到 NavigationView
的 android.view.InflateException
错误?
android.view.InflateException:表示您的 XML 文件本身有问题。
请检查您在XML标签中分配的所有尺寸、颜色资源和其他资源。
或者 post 您的 XML 文件在这里。
出现此错误的原因有多种。检查以下内容并确保它们正确:
- 如果您使用的是默认导航,请检查您使用的
com.google.android.material.navigation.NavigationView
中使用的drawable
和color
资源的代码,可能在activity_main.xml
中来自 Android Studio 的抽屉模板代码。 - 检查可绘制文件是否位于
res/drawable
文件夹中,而不是res/drawable-v21
。 - 检查您是否在
NavigationView
中使用了android:backgroundTint()
或android:src
或类似的东西。由于它们在 android API 级别 21 以下不起作用,请改用app:backgroundTint
或app:srcCompat
。
您可以检查您的 XML 文件。您的 xml 菜单、导航 header 和其他内容有问题。就我而言,res/menu/menu.xml
错误对于那些选择的答案没有帮助他们的人,我发现 NavigationView 主题有问题,它应该是 appCompat 主题(至少对我而言)。 创建新样式后:
<style name="NavView" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowNoTitle">true</item>
...
</style>
并在我 mainactivity.xml 的 NavigationView 中将其与 android:theme="@style/NavView" 一起使用,该应用程序现在运行完美。
就我而言,问题出在 navigation.NavigationView app:headerLayout 布局中 我正在设置
<ImageView
app:srcCompat="@mipmap/ic_launcher_round"
/>
问题出在 ic_launcher_round 因为它在文件夹 mipmap-anydpi-v26 中 我正在使用 android 版本 7.1.1,即 API 级别:25
希望这对大家有帮助
在我的例子中,问题是清单文件中的主题值
<activity
android:name=".ui.BarcodeReaderDrawerActivity"
android:label="@string/title_activity_barcode_reader_drawer">
android:theme="@style/AppBaseTheme.NoActionBar"
</activity>
更改于
<activity
android:name=".ui.BarcodeReaderDrawerActivity"
android:label="@string/title_activity_barcode_reader_drawer"
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar">
</activity>
在我的例子中,我手动将 res/drawable-v24
中的所有内容移动到 res/drawable
文件夹,将 res/mipmap-anydpi-v26
中的所有内容手动移动到 res/mipmap-hdpi
并且问题已在具有 Android 的手机中解决5 和 6.
我在升级到Androidx的过程中出现了这个错误,很难找到。问题出在 activity 主题上。
在 styles.xml 中,不知何故我弄错了 android material 主题,导致导航栏无法附加到操作栏。
from:
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
to:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
就我而言,在导航页眉布局中,我的图像太大,不适合屏幕。我更改了那个图标,它 运行.
我尝试更改模块设置、gradle 设置、更改依赖项等等,发现问题出在导航视图上,但问题类型不同,即
为抽屉布局选择的图像溢出 -> 所以只需更改图像或编辑它调整大小然后尝试。
因此,导航视图在某些设备中会引发错误。
此错误与主题有关。我通过评论主题中的以下行解决了我的问题
<style name="AppTheme.NavigationView" >
<!--<item name="android:textColorSecondary">#FFFFFF</item>-->
<item name="android:scrollbarThumbVertical">@android:color/transparent</item>
<item name="elevation">0dp</item>
</style>
通过对主题代码逐行删除或注释,可以快速断定问题出在哪里。
我的问题不是因为 android:src
但是因为我使用了矢量渐变作为背景(android:background="@drawable/bg"
)
内部导航 header 布局
而且这只发生在 Android 6
我从这里更改了向量:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" android:width="200dp" android:height="133dp" android:viewportWidth="375" android:viewportHeight="280">
<path android:pathData="M0 0h375v280H0V0z">
<aapt:attr name="android:fillColor">
<gradient android:endX="497.417" android:endY="263.205" android:startX="150.5" android:startY="-33.5" android:type="linear">
<item android:color="#FFFFFFFF" android:offset="0"/>
<item android:color="#00000000" android:offset="1"/>
</gradient>
</aapt:attr>
</path>
</vector>
至此
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="315"
android:endColor="#ffffff"
android:startColor="#000000"
android:type="linear" />
</shape>
崩溃消失了