You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

夜间模式下Bottom Navigation View抛出InflateException问题

BottomNavigationView夜间模式崩溃问题(小米Redmi Note 9 Pro)

已确认问题源于夜间模式主题,正常主题下应用运行完全正常。使用Android Studio创建默认Bottom Navigation Activity,项目在模拟器上运行正常,但在小米Redmi Note 9 Pro手机上,闪屏页结束后应用崩溃;新建默认导航项目则能正常运行。

崩溃日志

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.foroshgah_slami, PID: 15695
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.foroshgah_slami/com.example.foroshgah_slami.activities.DashboardActivity}: android.view.InflateException: Binary XML file line #19 in com.example.foroshgah_slami:layout/activity_dashboard: Binary XML file line #19 in com.example.foroshgah_slami:layout/activity_dashboard: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3771)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2291)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:210)
        at android.os.Looper.loop(Looper.java:299)
        at android.app.ActivityThread.main(ActivityThread.java:8319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
     Caused by: android.view.InflateException: Binary XML file line #19 in com.example.foroshgah_slami:layout/activity_dashboard: Binary XML file line #19 in com.example.foroshgah_slami:layout/activity_dashboard: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
     Caused by: android.view.InflateException: Binary XML file line #19 in com.example.foroshgah_slami:layout/activity_dashboard: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:881)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1033)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:988)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1150)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1111)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:709)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:547)
        at com.example.foroshgah_slami.databinding.ActivityDashboardBinding.inflate(ActivityDashboardBinding.java:49)
        at com.example.foroshgah_slami.databinding.ActivityDashboardBinding.inflate(ActivityDashboardBinding.java:43)
        at com.example.foroshgah_slami.activities.DashboardActivity.onCreate(DashboardActivity.kt:20)
        at android.app.Activity.performCreate(Activity.java:8163)
        at android.app.Activity.performCreate(Activity.java:8130)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1330)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3744)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2291)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:210)
        at android.os.Looper.loop(Looper.java:299)
        at android.app.ActivityThread.main(ActivityThread.java:8319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
        at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:244)
        at android.content.res.MiuiResourcesImpl.getValue(MiuiResourcesImpl.java:96)
        at android.content.res.Resources.getValue(Resources.java:1457)
        at androidx.core.content.res.ResourcesCompat.isColorInt(ResourcesCompat.java:309)
        at androidx.core.content.res.ResourcesCompat.inflateColorStateList(ResourcesCompat.java:256)
        at androidx.core.content.res.ResourcesCompat.getColorStateList(ResourcesCompat.java:236)
        at androidx.core.content.ContextCompat.getColorStateList(ContextCompat.java:558)
        at androidx.appcompat.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:48)
        at com.google.android.material.navigation.NavigationBarMenuView.createDefaultColorStateList(NavigationBarMenuView.java:660)
        at com.google.android.material.navigation.NavigationBarMenuView.<init>(NavigationBarMenuView.java:113)
        at com.google.android.material.bottomnavigation.BottomNavigationMenuView.<init>(BottomNavigationMenuView.java:50)
        at com.google.android.material.bottomnavigation.BottomNavigationView.createNavigationBarMenuView(BottomNavigationView.java:216)
        at com.google.android.material.navigation.NavigationBarView.<init>(NavigationBarView.java:158)
        at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:108)
        at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:103)
        at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:98)
            ... 28 more

DashboardActivity代码

package com.example.foroshgah_slami.activities

import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.example.foroshgah_slami.R
import com.example.foroshgah_slami.databinding.ActivityDashboardBinding

class DashboardActivity : BaseActivity() {

    private lateinit var binding: ActivityDashboardBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityDashboardBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val navView: BottomNavigationView = binding.navView

        val navController = findNavController(R.id.nav_host_fragment_activity_dashboard)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }

    override fun onBackPressed() {
        doubleBackToExitPressedOnce()
    }
}

Activity布局XML文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

    <fragment
        android:id="@+id/nav_host_fragment_activity_dashboard"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

闪屏页代码

package com.example.foroshgah_slami.activities

import android.content.Intent
import android.os.Build
import android.os.Build.VERSION_CODES
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.view.WindowInsets
import android.view.WindowManager
import com.example.foroshgah_slami.R

class splash_activity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        if (Build.VERSION.SDK_INT >= VERSION_CODES.R){
            window.insetsController?.hide(WindowInsets.Type.statusBars())
        } else {
            window.setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN
            )
        }
        Handler().postDelayed({
            startActivity(Intent(this@splash_activity, DashboardActivity::class.java))
            finish()
        } ,2500)
    }
}

解决方案

从崩溃日志的Resources$NotFoundException: Resource ID #0x0可以看出,夜间模式下BottomNavigationView加载时找不到对应的颜色资源,原因是夜间主题缺少必要的颜色配置。

方案1:完善夜间主题配置

检查res/values-night/styles.xml,确保主题继承自MaterialComponents系列主题,并补充必要的颜色属性:

<style name="Theme.ForoshgahSlami" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- 主色调配置 -->
    <item name="colorPrimary">@color/purple_200</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/black</item>
    <!-- 确保Surface相关颜色在夜间模式有定义 -->
    <item name="colorOnSurface">@color/white</item>
    <!-- 指定BottomNavigationView的默认样式 -->
    <item name="bottomNavigationStyle">@style/Widget.MaterialComponents.BottomNavigationView</item>
</style>

方案2:显式设置BottomNavigationView的颜色

在布局XML中给BottomNavigationView添加itemIconTint和itemTextTint属性,指定颜色状态列表:

<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:itemIconTint="@color/bottom_nav_item_color"
    app:itemTextTint="@color/bottom_nav_item_color" />

然后分别创建正常和夜间模式的颜色状态列表:

  • res/color/bottom_nav_item_color.xml(正常模式):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/purple_700" android:state_checked="true" />
    <item android:color="@color/gray" android:state_checked="false" />
</selector>
  • res/color-night/bottom_nav_item_color.xml(夜间模式):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/purple_200" android:state_checked="true" />
    <item android:color="@color/light_gray" android:state_checked="false" />
</selector>

方案3:检查主题引用完整性

确保夜间主题中没有误删系统默认依赖的属性引用,比如?attr/colorPrimary、?attr/colorOnSurface等,这些属性是Material组件正常加载的必要条件。

内容的提问来源于stack exchange,提问作者BigBeast DGX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:07:33