Androidコードを使用してプログラムでナイトモードを有効にする方法を探しています:
public static void setNightMode(Context target , boolean state){
UiModeManager uiManager = (UiModeManager) target.getSystemService(Context.UI_MODE_SERVICE);
if (state) {
//uiManager.enableCarMode(0);
uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
} else {
// uiManager.disableCarMode(0);
uiManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
}
}
画面上で何も変更されていません。ナイトモードは無効のままです。これによると リンク
CarModeまたはdeskModeを有効にする必要はありません。 Android Studio:
11-26 12:15:16.662 3823-3823/? D/UiModeManager: updateConfigurationLocked: mDockState=0; mCarMode=false; mNightMode=2; uiMode=33
11-26 12:15:26.802 3823-3823/? V/UiModeManager: updateLocked: null action, mDockState=0, category=null
NightOwl には、Androidで昼間/夜間モードを切り替えるための独自の実装があります。 NightOwlを使い始めるのはとても簡単です。ここにコードスニペットがあります:
ApplicationクラスでNightOwlを初期化し、
NightOwl.builder().defaultMode(0).create();
Activityクラスで3つのメソッドを呼び出し、
public class DemoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// step1 before super.onCreate
NightOwl.owlBeforeCreate(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
// step2 after setContentView
NightOwl.owlAfterCreate(this);
// write your code
}
@Override
protected void onResume() {
super.onResume();
// step3 onResume
NightOwl.owlResume(this);
}
}
好きなようにどこでも皮膚を切り替え、
View v = findViewById(R.id.button);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NightOwl.owlNewDress(SettingActivity.this);
}
});
styles.xmlファイルでデフォルトのテーマを_Theme.AppCompat.Light.DarkActionBar
_から_Theme.AppCompat.DayNight.DarkActionBar
_に変更してから、AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
ナイトモードに切り替えます。 APIv23(Android 6.0)以上でテストしましたが、問題なく動作しています。より良い説明については、 Androidによるこのコードラボ を参照してください