ian*_*ake 6 android android-appcompat
我正在使用版本23.2中引入的AppCompat的新Theme.AppCompat.DayNight主题,但它不是自动在一天(浅色)和夜晚(暗)主题之间切换,它总是显示为浅色主题.如何让它切换到黑暗主题?
正如同一篇23.2博文中所述,
默认情况下,是否为'night'将匹配系统值(来自UiModeManager.getNightMode())
然而,截至目前,这实际上意味着它相当于MODE_NIGHT_NO触发夜间模式的唯一东西是来自Gingerbread时代的汽车码头.
这意味着在当前设备上,使用DayNight主题时查看黑暗主题的唯一方法是使用NIGHT_MODE_YES或NIGHT_MODE_AUTO
正如DayNight官方帖子和Chris Banes的帖子所述,您可以在全局级别或本地级别更改模式.
全局级别依赖于静态AppCompatDelegate.setDefaultNightMode()方法,该方法在整个应用程序中设置DayNight模式.因为这只适用于您的进程处于活动状态(即,它只是一个内存标志),您需要确保每次启动应用程序时都设置它.Chris发布的一个推荐方法是将其设置为自定义Application类的静态方法:
static {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_...);
}
public class MyApplication extends Application {
Run Code Online (Sandbox Code Playgroud)
相反,如果您只想更改单个活动/对话框的模式,则可以改为getDelegate().setLocalNightMode():
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Set the local night mode to some value
getDelegate().setLocalNightMode(
AppCompatDelegate.MODE_NIGHT_...);
// Now recreate for it to take effect
recreate();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只会改变单个实例 - 您将注意到recreate()- 对已经膨胀的视图的调用不会受到夜间模式更改的影响,因此您可以强制活动重新创建自己以获取更新的值.
当然,克里斯的帖子也说
还要记住默认值是MODE_NIGHT_FOLLOW_SYSTEM,因此如果我们将来向平台添加用户可见设置,AppCompat将自动使用它.
| 归档时间: |
|
| 查看次数: |
5614 次 |
| 最近记录: |