2

夜間モードがオンの場合、自分のアクティビティで別のレイアウトを選択します。私がやっていることアプリで夜間モードの状態が検出されない - オンに切り替えた場合でも

次のように

nightnotnightに別々のレイアウトフォルダを追加しました:

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

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

を私は夜モードを切り替えると、アプリを再度開いたときに今、私はレイアウトが変化するであろう期待していましたしかし、それはしません。

これが機能するには何か特別なことがありますか?

これを機能させるために追加する必要があるアクセス許可はありますか?はいの場合はどちらですか?

代わりの方法はありません。私の使用例では、特に、夜間モードのステータスに基づいてレイアウトを選択する必要があります。私は、正しいレイアウトが、フォルダが定位置にあるときに自動的に選択されない理由を理解しようとしています。


UPDATE:絞り込ま問題。レイアウトlayout-notnightは常に選択されます。したがって、フォルダ構造は正常に動作しています。アプリが夜間モードを検出できません。 (ナイトモードは、デバイスには、上のトグルしようと、それは、デバイスが、アプリ上で動作オフ文句を検出でONトグルする)

そこで質問は今:

は、それがの状態を検出することができることのために必要な権限ですナイトモード? Wi-Fiの状態やネットワークの状態を検出するために必要です。

+0

あなたはそれらを同じフォルダに置くことはできません。それらを 'day'と 'night'という接尾辞で区切り、 'onCreate'で' setContentView'を使用して適切なものを選択できますか? – Vucko

+0

いいえ、私はそうすることができることを知っています。しかし、それは私のユースケースではありません。主な目的は、夜間モードの状況に基づいてレイアウトを変更することです。 – AndroidMechanic

+0

ああ、申し訳ありません。私はあなたがやろうとしていることを理解しています。例えば、アンドロイドが 'mdpi'、' hdpi'、 'xhdpi'などと似たようなものでしょうか。それがどのように行われているのかを知り、それを模倣しようと思いますか? – Vucko

答えて

0

UiModeManagerを試してみることができます。それはメソッドsetNightMode()getNightMode()を提供します。たぶんそれは問題を解決しないかもしれませんが、これはそれを行う方法です。

+0

お返事ありがとうございます。私が知っています。しかし、私は基本的に正しいレイアウトがなぜ自動的に選ばれないのかを調べようとしています。 – AndroidMechanic

+0

あなたのコードで 'UiModeManager.setNightMode(MODE_NIGHT_AUTO)'を使ってみましたか? –

+0

私はCyanogenmod 13にいます。私はそれを簡単な設定から切り替えることができます。 – AndroidMechanic

0

documentationは言う:以下のAPI 22とオン

を車や机モードを がデバイス上で有効になっている場合、ナイトモードへの変更はのみ有効です。 API 23から、 夜間モードへの変更は常に有効です。

自動的にデバイスの現在位置と他の特定の センサ

そしてhereからに基づいnotnight夜と切り替える MODE_NIGHT_AUTOは(BOLDテキストに気づく):

これは、夜間モードが がautoモードになっている場合、アプリケーションの使用中に変更される可能性がありますe(デフォルト)。この場合、モードは 時刻に基づいて変更されます。

したがって、デバイスの時刻を適切な値に調整できます。

しかし、夜間モードの検出は、他の特定のセンサー(開発者サイトではっきりとは言わない)にも依存することに注意してください。光センサーが考慮されるかもしれないと思います。

+0

私はAPIレベル23におり、すべての設定を試しました。アプリケーションは検出されません。検出に依存すると思われるその他の要因は何ですか? – AndroidMechanic

+0

いくつかの特定のセンサーが、どのセンサーを使用するか指定していませんが – suitianshi

+0

ですが、どのセンサーが分かりますか?この情報のための外部ソース/リファレンスはありますか? – AndroidMechanic

0

トグルボタンまたはチェックボックスを使用している場合は、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); 

に、あなたは、このメソッドを使用してレイアウトを変更することができます。

+0

レスポンスありがとうございますが、私が探しているものではありません。私は回避策を得る方法を知っています。私が探している答えは、デバイスレベルで夜間モードがオンになっているときです。アプリがそれを検出しない理由は何ですか... – AndroidMechanic

関連する問題