今天遇到一个RadioButton不显示问题,我试了好几个手机都没问题,然后就让客户把关于手机的一些信息截屏给我,发现他是深色模式,后面我也把Android 10 以上的手机改成深色模式,发现也不显示,但是点击控件的位置还是能出来的选中的效果。
问题
Android Studio 4.1以上版本创建项目时默认有两个主题,但是两个使用的都是Theme.MaterialComponents.DayNight主题
<style name="Theme.Test" parent="Theme.MaterialComponents.DayNight">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:windowFullscreen">true</item>
<item name="android:colorAccent">@color/blue</item>
</style>
但是这个主题有个问题想改一些控件的样式不好改,比如自定义Button设置了background一点作用都没。后面我把主题改成Theme.MaterialComponents.DayNight.NoActionBar.Bridge。
<style name="Theme.Test" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:windowFullscreen">true</item>
<item name="android:colorAccent">@color/blue</item>
</style>
虽然这个主题能自定义样式,但是我的APP是没有做深色模式适配的,导致深色模式下一些原生主题控件不显示。
解决
最后把深色主题values-night-themes.xml改成Theme.MaterialComponents.Light.NoActionBar.Bridge。
<style name="Theme.Test" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:windowFullscreen">true</item>
<item name="android:colorAccent">@color/blue</item>
</style>