AppCompat DayNight主题始终显示为Light主题?
我使用的是version 23.2中引入的AppCompat的新Theme.AppCompat.DayNight主题,但不是自动在一天(浅色)和夜晚(深色)主题之间切换,而是始终显示为浅色主题。我如何才能切换到黑暗的主题?AppCompat DayNight主题始终显示为Light主题?
默认情况下,无论是“空中飞人”将匹配系统值(从UiModeManager.getNightMode())
然而,截至目前,这实际上意味着它相当于作为触发夜间模式的唯一的东西是姜饼时代的汽车码头。
这意味着,在目前的设备,只有这样,才能看到一个黑暗的主题使用DayNight主题时使用NIGHT_MODE_YES或NIGHT_MODE_AUTO
由于在这两个官爵和Chris Banes' post on DayNight说,你可以改变模式在全球一级或地方一级。
全局级别依赖于静态的AppCompatDelegate.setDefaultNightMode()
方法,该方法在整个应用程序中设置DayNight模式。由于这只适用于您的进程处于活动状态时(即它只是一个内存标志),所以您需要确保在每次启动应用程序时都设置它。从克里斯后做一个推荐的方法是将其设置为自定义应用程序类的静态方法:
static {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_...);
}
public class MyApplication extends Application {
相反,如果你只是想改变模式,单个活动/对话框,您可以改为调用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();
}
}
}
这改变仅仅是单个实例 - 你会注意到在调用recreate()
- 已经被膨胀不会在夜间模式变化的影响意见,这样你就可以强制重新创建自己以获取更新值的活动。
当然,克里斯后还指出
还记得,默认为MODE_NIGHT_FOLLOW_SYSTEM,所以如果我们在将来增加一个用户可见的设置到平台,程序兼容性会自动使用它。
要在白天或晚上更改其他属性,请查看[本答案](http://stackoverflow.com/a/35629740/1676363),其中解释如何使用'night'和'notnight'资源文件夹秒。 – ianhanniballake
似乎是在运行Android Lollipop的错误与程序兼容性23.2.0:Google Issue Tracker
下面的代码不只是工作前棒棒堂:
public class MyApplication extends Application {
static {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES);
}
[...]
}
我相信这是正确的回答:http://stackoverflow.com/a/35701225/859190 – mariotaku