1

我在我的应用程序的设置中添加了一个颜色选择器首选项,以便用户可以选择ActionBar(我正在使用ActionBarSherlock)的背景颜色。理想情况下,我想在不让用户重新启动应用程序的情况下更改颜色,我假设这意味着添加代码以更改onResume每个Activityand中的颜色Fragment。但是,当我第一次点击一个活动时,颜色变化会起作用,但如果我回到它,无论是使用设备上的后退按钮还是ActionBar本身,颜色似乎都没有设置并且是透明的。

这是我用来设置背景颜色的代码。我尝试将其添加onCreateonResume

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 回答