Android夜间模式DayNight问题

Android夜间模式DayNight问题

今天收到用户反馈,界面上完全看不到文字。

这在之前的测试过程中完全没有发现,好在用户发了截图。

一、问题

问题:界面上几乎看不到文字

机型:荣耀畅享8 Plus

位置 描述 截图
主界面
升级界面
关于界面

二、相关代码

1
2
3
4
5
6
7
<TextView
android:id="@+id/tv_title"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:text="@string/app_name"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
1
2
3
4
5
6
7
8
9
<TextView
android:id="@+id/tv_name"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:layout_width="0dp"
android:gravity="left|center_vertical"
android:layout_height="match_parent"
android:singleLine="true"
android:lines="1"
android:layout_weight="1"/>

三、问题所在

绝大部分TextView都没有直接指定文本颜色,而是通过使用textAppearance设置文本风格。

因此问题出在主题Theme上。

使用的主题是Theme.AppCompat.DayNight.NoActionBar,属于AppCompat,相关资源打包在apk安装包中,因此跟手机系统的主题设置无关。

问题唯一的可能便是DayNight上。

四、夜间模式

常量 说明 截图
MODE_NIGHT_FOLLOW_SYSTEM 默认值,跟随系统
MODE_NIGHT_AUTO 根据日出日落时间自动设定
MODE_NIGHT_NO 关闭夜间模式
MODE_NIGHT_YES 开启夜间模式

当夜间模式设置为MODE_NIGHT_YES后,出现了与问题一致的情况。

因为默认的夜间模式为MODE_NIGHT_FOLLOW_SYSTEM,因此可能出现开启夜间模式的情况。

神马笔记当前暂未实现夜间模式的配色,因此便出现了问题。

五、解决方案

ApplicationonCreate()方法中增加下面代码。

1
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

强制关闭夜间模式。

六、Finally

世尊说我见人见众生见寿者见,即非我见人见众生见寿者见,是名我见人见众生见寿者见。