1. ホーム
  2. android

[解決済み] Androidで実行時に現在のテーマを変更する方法 [重複]について

2022-05-01 18:42:01

質問

アプリケーション全体に適用するテーマをユーザーが選択できるPreferenceActivityを作成しました。

ユーザーがテーマを選択すると、以下のコードが実行されます。

if (...) {
    getApplication().setTheme(R.style.BlackTheme);
} else {
    getApplication().setTheme(R.style.LightTheme);
}

しかし、コードが実行されていることをデバッガで確認しても、ユーザーインターフェイスに変化が見られません。

テーマは res/values/styles.xml そして、Eclipseは何のエラーも表示しません。

<resources>
    <style name="LightTheme" parent="@android:style/Theme.Light">
    </style>

    <style name="BlackTheme" parent="@android:style/Theme.Black">
    </style>    
</resources>

何が起こっているのか、どのように修正すればいいのか、何か思い当たることはありませんか? 私は setTheme をコード内の特別な場所で使用することはできますか?私のアプリケーションは、いくつかのアクティビティで構成されています。

どのように解決するのですか?

すべてのアクティビティに一度だけ設定する方法も見てみたいです。しかし、私が知る限り、ビューを表示する前に、各アクティビティで設定する必要があります。

参考までにこちらをご確認ください。

http://www.anddev.org/applying_a_theme_to_your_application-t817.html

編集(そのフォーラムからコピー)。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Call setTheme before creation of any(!) View.
         setTheme(android.R.style.Theme_Dark);

        // ...
        setContentView(R.layout.main);
    }



編集

を呼び出すと setTheme の後に super.onCreate(savedInstanceState); を呼び出すと、アクティビティは再作成されます。 setTheme の前に super.onCreate(savedInstanceState); テーマが設定され、アクティビティ はもう再作成されません。

  protected void onCreate(Bundle savedInstanceState) {
     setTheme(android.R.style.Theme_Dark);
     super.onCreate(savedInstanceState);


    // ...
    setContentView(R.layout.main);
}