アプリのユーザーがアプリケーションのテーマを変更できるようにしたい。例:Dark、Light、Light、暗いアクションバーとデバイスのデフォルト。これはどのように可能ですか、私は4つのオプション(上に表示)を備えたlistprefを含む設定画面を持っています。ユーザーにアプリのテーマを変更させるにはどうすればよいですか?
ありがとう
アプリのユーザーがアプリケーションのテーマを変更できるようにしたい。例:Dark、Light、Light、暗いアクションバーとデバイスのデフォルト。これはどのように可能ですか、私は4つのオプション(上に表示)を備えたlistprefを含む設定画面を持っています。ユーザーにアプリのテーマを変更させるにはどうすればよいですか?
ありがとう
組み込みのテーマのみを使用したい場合や、それらをカスタマイズする必要がない場合は、非常に簡単です。
ListPreferece
例として、次のようなエントリ値で使用します。
<string-array name="pref_theme_values" translatable="false">
<item>THEME_LIGHT</item>
<item>THEME_DARK</item>
</string-array>
次に、次の方法を使用して、選択した値を取得できます。
public int getThemeId(Context context) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
String theme = settings.getString(context.getResources().getString(R.string.pref_theme_key), null);
if (theme == null || theme.equals("THEME_LIGHT")) {
return android.R.style.Theme_Holo_Light;
} else if (theme.equals("THEME_DARK")) {
return android.R.style.Theme_Holo;
}
// default
return android.R.style.Theme_Holo_Light;
}
その後、onCreate
メソッドをオーバーライドする必要があります。
// onCreate
this.mCurrentTheme = this.getThemeId(this);
this.setTheme(this.mCurrentTheme);
this.setContentView(...); // should be after the setTheme call
そしてonStart
メソッド(ユーザーが設定ページから戻ったらすぐにテーマを更新する必要があるため)
// onStart
int newTheme = this.getThemeId(this);
if(this.mCurrentTheme != newTheme) {
this.finish();
this.startActivity(new Intent(this, this.getClass()));
return;
}
また、アクティビティの再開後にアプリケーションが同じデータを表示するように、アクティビティの状態を何らかの方法で保存する必要があります。
これを行う方法の例を次に示します。
if (prefs.getBoolean("1darkTheme", false)==false){//user has selected dark theme
setTheme(android.R.style.Theme_Holo);
Toast.makeText(getApplicationContext(), "dark", Toast.LENGTH_SHORT).show();
} else {
setTheme(android.R.style.Theme_Holo_Light);
Toast.makeText(getApplicationContext(), "light", Toast.LENGTH_SHORT).show();
}
setContentView(R.layout.main);