java - 自定义样式中的secondaryTextColor 不起作用
问题描述
这是我的主要 xml 布局:
<?xml version="1.0" encoding="utf-8"?>
<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:layout_marginTop="00dp"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/navigation"
android:animateLayoutChanges="true">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?attr/myBackgroundColor"
app:menu="@menu/bottom_navigation_items"
app:itemTextAppearanceActive="@color/colorAccent"
app:itemTextColor="@color/bottom_nav_color"
app:itemIconTint="@color/bottom_nav_color"/>
</FrameLayout>
<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:layout_marginTop="0dp"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:itemTextColor="?attr/myTextColor"
app:menu="@menu/activity_main_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
和我的风格
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="brightTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">#2196F3</item>
<item name="colorPrimaryDark">#1976D2</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="myBackgroundColor">#FBFCFC</item>
<item name="myEtBackgroundColor">#2196F3</item>
<item name="myCardBackground">#FFFFFF</item>
<item name="myTextColor">#808080</item>
<item name="myTintColor">#000000</item>
<item name="myButtonColor">#2196F3</item>
<item name="myHintTextColor">#B3808080</item>
<item name="android:alertDialogTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="android:windowBackground">@color/colorWindowBackgroundDay</item>
</style>
<style name="darkTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">#212121</item>
<item name="colorPrimaryDark">#000000</item>
<item name="android:textColorSecondary">#555</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="myBackgroundColor">#424242</item>
<item name="myEtBackgroundColor">#606060</item>
<item name="myCardBackground">#212121</item>
<item name="myTextColor">#FFFFFF</item>
<item name="myTintColor">#FFFFFF</item>
<item name="myButtonColor">#2196F3</item>
<item name="myHintTextColor">#B3FFFFFF</item>
<item name="android:alertDialogTheme">@style/ThemeOverlay.AppCompat.Dark</item>
<item name="android:windowBackground">@color/colorWindowBackgroundNight</item>
</style>
问题是,我不能<item name="android:textColorSecondary">#555</item>
在亮模式或暗模式下使用,因为我收到了这个错误:
2019-11-21 12:35:29.663 6291-6320/pl.jawegiel.simplenotepad.debug E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-11-21 12:35:29.796 6291-6291/pl.jawegiel.simplenotepad.debug E/lenotepad.debu: Invalid ID 0x00000000.
2019-11-21 12:35:29.798 6291-6291/pl.jawegiel.simplenotepad.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: pl.jawegiel.simplenotepad.debug, PID: 6291
java.lang.RuntimeException: Unable to start activity ComponentInfo{pl.jawegiel.simplenotepad.debug/pl.jawegiel.simplenotepad.MainActivity}: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:280)
at android.app.ActivityThread.main(ActivityThread.java:6748)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
Caused by: android.view.InflateException: Binary XML file line #25: 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:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
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.setContentView(AppCompatDelegateImpl.java:469)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at pl.jawegiel.simplenotepad.MainActivity.onCreate(MainActivity.java:67)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2936)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:280)
at android.app.ActivityThread.main(ActivityThread.java:6748)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:216)
2019-11-21 12:35:29.798 6291-6291/pl.jawegiel.simplenotepad.debug E/AndroidRuntime: at android.content.res.Resources.getColorStateList(Resources.java:1031)
at android.content.Context.getColorStateList(Context.java:651)
at androidx.appcompat.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:67)
at com.google.android.material.bottomnavigation.BottomNavigationMenuView.createDefaultColorStateList(BottomNavigationMenuView.java:467)
at com.google.android.material.bottomnavigation.BottomNavigationMenuView.<init>(BottomNavigationMenuView.java:101)
at com.google.android.material.bottomnavigation.BottomNavigationMenuView.<init>(BottomNavigationMenuView.java:86)
at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:123)
at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:114)
... 30 more
.
我该怎么办?我正在尝试能够更改辅助文本颜色,但不幸的是它不起作用。如果我从布局中同时删除 BottomNavigationView 和 Navigation 视图,一切正常。
解决方案
原来我需要从@colors 传递资源而不是原始字符串。
推荐阅读
- java - Java 加密将原始字节转换为 PublicKey,反之亦然
- javascript - JS 为各种相似文件返回单一文件类型(例如'mp4' || 'm4v' = 'MOV')
- java - Kotlin 和泛型:如何过滤值
- snowflake-cloud-data-platform - Snowflake Web UI 中的结果过滤已禁用
- sql - 将同一列中的值与 SQL Server 中的其他列进行比较
- java - 在 Selenium 中单击具有不同 ID 的元素
- azure - 如何与 Kubernetes 上的 Secrets Store CSI 驱动程序共享所有 Azure KeyVault 密钥和机密
- r - 如何使用“df”中的三个分类变量和一个数值变量创建具有四个数值变量的“df2”
- matlab - 在 Matlab 上构建展开矩阵
- java - 使用 SimpleDateFormat 类解析 2020-02-29T18:21:13.2627230Z 的正确模式