我在应用中的设置中添加了颜色选择器首选项,因此用户可以选择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
页脚没有相同的问题并保留颜色。
答案 0 :(得分: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);
}
}