如指定同一篇 23.2 博客文章 http://android-developers.blogspot.com/2016/02/android-support-library-232.html,
默认情况下,是否为‘night’将匹配系统值(来自UiModeManager.getNightMode() http://developer.android.com/reference/android/app/UiModeManager.html#getNightMode())
然而,到目前为止,这实际上意味着它相当于MODE_NIGHT_NO
因为唯一触发夜间模式的是姜饼时代的汽车码头。
这意味着在当前设备上,使用 DayNight 主题时查看深色主题的唯一方法是使用 NIGHT_MODE_YES 或 NIGHT_MODE_AUTO
正如官方帖子和克里斯·贝恩斯 (Chris Banes) 在 DayNight 上的帖子 https://medium.com/@chrisbanes/appcompat-v23-2-daynight-d10f90c83e94,您可以在全局级别或本地级别更改模式。
全球层面依赖于静态AppCompatDelegate.setDefaultNightMode()
方法,它设置整个应用程序的日夜模式。由于这仅在您的进程处于活动状态时适用(即,它只是内存中的标志),因此您需要确保每次启动应用程序时都设置它。 Chris 的帖子推荐的一种方法是将其设置在自定义 Application 类的静态方法中:
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,因此如果我们将来向平台添加用户可见的设置,AppCompat 将自动使用它。