11

重複の可能性:
Android で実行時に現在のテーマを変更する方法

ユーザーが実行時にテーマを切り替えることができる Android アプリケーションがあります。テーマの切り替えは簡単ですが、アクティビティが再作成されるまでテーマは適用されません。テーマを現在のアクティビティに適用する方法を見つけましたが、ユーザーが戻るボタンを押した場合、前の画面にはまだ古いテーマがあります。それらの活動のテーマを変更するにはどうすればよいですか? 対応アプリ例:Tasks Free

4

2 に答える 2

6

setContentView() を呼び出す前に、実行時に動的にアクティビティの onCreate() メソッドで setTheme() を呼び出します。テーマを変更するには、アクティビティを再開するだけです。

このファイルを参照してください..!

また、これこれを見たい...これが役立つことを願っています...!

于 2012-07-13T07:14:46.597 に答える
5

私が推測する単なるヒント:

finish();通話前

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme);

すべてのアクティビティで onActivityResult を実装します

protected void onActivityResult(int request, int result, Intent data) {
    if(result == AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme)
    {
        //update the current theme
    }
}

別の解決策(より良い):

テーマを保存するクラスを実装します。

public class CurrentThemeHolder {
    private CurrentThemeHolder() {
    }
    private static instance;
    public static getInstance() {
        if(instance == null)
            return new CurrentThemeHolder();
        else
            return instance;
    }
    private int mTheme; //identifier of the theme
    public getTheme() {
        return mTheme;
    }
    public setTheme(int newTheme){
        mTheme = newTheme;
    }
}

次に、すべてのアクティビティでこの ThemeActivity を拡張します。

public class ThemeActivity extends Activity {
    private int mTheme;
    protected void onResume() {
        if(mTheme != CurrentThemeHolder.getInstance().getTheme()) {
            //do what you should do to set the theme
            mTheme = CurrentThemeHolder.getInstance().getTheme();
            //everytime you set the theme save it
            //this maybe should be done in onCreate()
        }
    }
}
于 2012-07-12T22:36:01.643 に答える