3

ナイトモードがオンの場合、アクティビティで別のレイアウトを選択したい。

私がやった事:

次のように、nightとの個別のレイアウト フォルダを追加しました。notnight

res
-----layout-night
----------my_layout.xml

-----layout-notnight
----------my_layout.xml

さて、ナイトモードに切り替えてアプリを再度開くと、レイアウトが変わることを期待していましたが、変わりません.

これが機能するために追加で必要なものはありますか?

これが機能するために追加する必要がある許可はありますか? はいの場合、どちらですか?

別のアプローチを探していません。私のユースケースでは、ナイトモードのステータスに基づいてレイアウトを選択する必要があります。フォルダーが配置されているときに、正しいレイアウトが自動的に選択されない理由を理解しようとしています。


更新: 問題を絞り込みました。レイアウトlayout-notnightは常に選択されます。したがって、フォルダ構造は正常に機能しています。アプリがナイトモードを検出できません。(ナイトモードはデバイスでオンに切り替えられています-オンとオフを切り替えようとしましたが、デバイスでは機能しますが、アプリは検出しません)

だから今の質問は:

ナイトモードの状態を検出できるようにするために許可が必要ですか? Wi-Fi の状態とネットワークの状態を検出するために必要なように。

4

3 に答える 3

1

ドキュメントには次のように書かれています:

API 22 以下では、夜間モードへの変更は、デバイスで車またはデスク モードが有効になっている場合にのみ有効です。API 23 以降、夜間モードへの変更は常に有効です。

MODE_NIGHT_AUTOは、デバイスの現在の位置と他の特定のセンサーに基づいて、夜間と夜間を自動的に切り替えます

そしてここから (太字のテキストに注意してください):

これは、夜間モードが自動モード (デフォルト) のままである場合、アプリケーションの存続期間中に変更される可能性があります。この場合、モードは時刻に基づいて変更されます 。

そのため、デバイスの時間を適切な値に調整することができます。

ただし、ナイトモードの検出は他の特定のセンサーに依存する場合があることにも注意してください (開発者サイトには明確に記載されていません)。光センサーが考慮されるかもしれないと思います。

于 2016-07-13T07:29:52.943 に答える
1

を使用してみてくださいUiModeManager。メソッドsetNightMode()と を提供しますgetNightMode()。多分それは問題を解決しないでしょうが、これはそれを行う方法です。

于 2016-07-08T20:32:26.870 に答える
0

トグル ボタンまたはチェックボックスを使用している場合は、Boolean 値を SharedPreferences に保存し、それを使用してユーザーが夜間モードを希望しているかどうかを確認できます。これは、アプリを閉じて再度使用した後でも機能します。

CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        SharedPreferences sharedPreferences = getSharedPreferences("MyData", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            editor.putBoolean("dark", isChecked);
            editor.commit();
        }
    });

そして、次の活動で

 SharedPreferences preferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
    listView = (ListView) findViewById(R.id.listView);
    ArrayAdapter<String> adapter;
    if(preferences.getBoolean("dark",false) == true)
        adapter = new ArrayAdapter<String>(this,R.layout.list_item_dark,name);
    else
        adapter = new ArrayAdapter<String>(this,R.layout.list_item,name);

同様に、この方法を使用してレイアウトを変更できます。

于 2016-07-16T17:34:39.203 に答える