android 自带的夜间模式是真的丑
所以想通过监控模式来自定义模式
其实很简单
首先在?AndroidManifest.xml 添加监控
android:configChanges="orientation|screenSize|uiMode"
完整代码
<activity
android:name="com.zzf.bluetoothsmp.Liao_tian"
android:exported="false" />
<activity
android:name="com.zzf.bluetoothsmp.MainActivity"
android:exported="true"
android:configChanges="orientation|screenSize|uiMode"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
然后在?MainActivity 重写onConfigurationChanged( ) 方法
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
Log.d(TAG, "当前什么模式: 这是日间模式22222222222222222222222");
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
Log.d(TAG, "当前什么模式: 这是日间模式");
break;
case Configuration.UI_MODE_NIGHT_YES:
Log.d(TAG, "当前什么模式: 夜间模式");
break;
}
}
重写onConfigurationChanged注意下?
在Activity中添加了android:configChanges属性,目的是当android:configChanges所设置的属性值对应的配置属性发生改变时,通知程序调用 onConfigurationChanged()函数,而不会重启Activity。
这里简单说下configChanges
“mcc” :国际移动用户识别码所属国家代号改变了----- sim被侦测到了,去更新mcc,mcc是移动用户所属国家代号 “mnc”: 国际移动用户识别码的移动网号码改变了------ sim被侦测到了,去更新mnc,MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网 “locale”: 地址改变了-----用户选择了一个新的语言会显示出来 “touchscreen”: 触摸屏是改变了------通常是不会发生的 “keyboard” :键盘发生了改变----例如用户用了外部的键盘 “keyboardHidden”: 键盘的可用性发生了改变 “navigation”: 导航发生了变化-----通常也不会发生 “screenLayout”: 屏幕的显示发生了变化------不同的显示被激活 “fontScale”: 字体比例发生了变化----选择了不同的全局字体 “uiMode”: 用户的模式发生了变化 “orientation”: 屏幕方向改变了 “screenSize”: 屏幕大小改变了 “smallestScreenSize”: 屏幕的物理大小改变了,如:连接到一个外部的屏幕上 ?
|