1

アプリの設定にカラーピッカー設定を追加して、ユーザーがActionBar(使用しているActionBarSherlock)の背景色を選択できるようにしました。理想的には、ユーザーにアプリを再起動させずに色を変更したいと思います。これはonResume、すべてのActivityとで色を変更するコードを追加することを意味すると思いFragmentます。ただし、最初にアクティビティを押したときに色の変更は機能しますが、デバイスの戻るボタンを使用するか、ActionBarそれ自体を使用してアクティビティに戻ると、色が設定されていないように見え、透明になります。

これは、背景色を設定するために使用しているコードです。私はそれに追加してみonCreateましたonResume

public class MyActivity extends SherlockActivity {

   @Override
    public void onCreate(final Bundle icicle) 
    {
        super.onCreate(icicle);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(PreferenceManager.getDefaultSharedPreferences(this).getInt("app_color", getResources().getColor(R.color.app_color))));
    }

    @Override
    public void onResume()
    { 
        super.onResume();

        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(PreferenceManager.getDefaultSharedPreferences(this).getInt("app_color", getResources().getColor(R.color.app_color))));
    }
}

app_colorはカラーピッカープリファレンスの名前であり、colors値ファイルに保存されているデフォルトの色もあります。TextView同じ問題がなく、色が保持されているフッターもあります。

4

1 に答える 1

1

私は同じ問題を抱えていました。私が思いついたのはおそらく最善の解決策ではありませんが、少なくとも当面はうまくいきます。テーマが変更された場合(アプリでは背景色が変更されたかどうかを確認します)、次の方法でonRestartをチェックインします。変更された場合は、次のコードスニペットのようにアクティビティを開始します。私のアプリでは、すべてのアクティビティでこのメソッドを使用するため、このメソッドをアプリケーションクラスに配置します。

public static void restartOnThemeSwitch(Activity act) {

    String currentTheme = getThemeName(act.getTheme());

    String prefTheme = (prefs.getString(THEME, "dark"));

    if (currentTheme.equalsIgnoreCase(prefTheme) == false) {


        Intent it = act.getIntent();
        it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        act.startActivity(it);

    }

}
于 2012-11-03T16:18:53.113 に答える