2012-07-10 6 views
9
で、実行時に

をテーマを適用可能な重複:
How to change current Theme at runtime in Android変更とAndroid

は、私は、ユーザーが実行時にテーマを切り替えることができるようにAndroidアプリケーションを持っています。テーマを切り替えるのは簡単ですが、the theme isn't applied until the activity is recreated.私はapply the theme to current activityへの道を見つけましたが、ユーザーが戻るボタンを押すと、以前の画面には以前のテーマが残っています。これらの活動のテーマを変更するにはどうすればよいですか?それをサポートするアプリの例:Tasks Free

答えて

4

だけヒントは、私は考えます:

今すぐ
setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme); 

すべてのあなたの活動で、onActivityResult実装

コールfinish();

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

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

テーマを保存し、クラスの実装:実行時に動的に

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() 
     } 
    } 
} 
+0

hello sherif、Webからカラーコードを取得するソリューションがあるかどうかを知りたかったので、すべての特定のボタンに移動してBackGroundカラーを適用せずにすべてのボタンランタイムの色を変更できますテーマやスタイルを使用して任意のソリューションですか?あなたが持っている提案を教えてください。 – MKJParekh

+0

無限の色がありますか?または限られた色のセット? –

+0

私は20色が限られていますが、それらの20はサーバーからダウンロードされるので、色は一刻も変わることがあります。短期間の色は15-20周ぐらいです(修正なし)。ユーザーの1人がCustomViewを使用するように提案しました。http://stackoverflow.com/questions/22529646/android-app-apply-color-theme-dynamically-at-runtime – MKJParekh

5

、あなたの活動ののonCreate()メソッドでsetTheme()を呼び出します。

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を拡張してみましょうをsetContentView()を呼び出す前にテーマを変更するには、単にアクティビティを再開するだけです。

this file..!

はまたthisthis ...このことができます 希望を参照したい参照してください...!

+1

アクティビティの再起動は、現在のアクティビティを再開することができますが、ユーザーがクリックするとボタンの前のアクティビティにはまだ古いテーマがあります。これは、ユーザーが戻ったときにonCreateが呼び出されないため、テーマを設定できないためです。 – Giorgi

+0

あなたは永続的なテーマを設定してライブ壁紙のように同じスタイルを追加することができます設定で1つのアプリを作るようにしたい! @Giorgi –

+3

これは質問に答えません。再起動のアクティビティは現在表示されているアクティビティに適用されますが、ユーザーがクリックしたときに他のアクティビティに適用するにはどうすればよいですか? – Giorgi