0

アプリのユーザーがアプリケーションのテーマを変更できるようにしたい。例:Dark、Light、Light、暗いアクションバーとデバイスのデフォルト。これはどのように可能ですか、私は4つのオプション(上に表示)を備えたlistprefを含む設定画面を持っています。ユーザーにアプリのテーマを変更させるにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

組み込みのテーマのみを使用したい場合や、それらをカスタマイズする必要がない場合は、非常に簡単です。

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;
}

また、アクティビティの再開後にアプリケーションが同じデータを表示するように、アクティビティの状態を何らかの方法で保存する必要があります。

于 2013-03-16T12:56:27.717 に答える
2

これを行う方法の例を次に示します。

 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);
于 2013-03-16T12:28:08.827 に答える