我想创建一个包含更多按钮的新活动。每个按钮代表一种颜色。如果单击代表颜色的按钮(例如红色),如何更改操作栏(并保存)?
我做了一些改变动作栏颜色的东西,但如果我进入主页,颜色会再次改变。我需要序列化某些东西吗?谢谢!
pink.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
getSupportActionBar().setTitle("Pink");
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorPink)));
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
Window window =getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.colorAccent));
}
}
});
按钮xml。
<Button android:id="@+id/button_pink" android:layout_width="296dp"
android:layout_height="49dp" android:layout_marginTop="26dp"
android:background="@color/colorPink" android:text="pink"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:1)
首先阅读documentation。如文档中所述。
<resources>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">ANY_HEX_COLOR_CODE</item>
</style>
</resources>
并且,将“MyTheme”设置为应用程序/活动的主题。
答案 1 :(得分:0)
这种情况正在发生,因为当您重新启动活动时,根据活动生命周期onReStart()然后调用onStart(),操作栏颜色将变为默认值。与在代码中一样,您可以在单击事件上设置操作栏颜色。
可能的解决方案是,在按钮单击事件中,您可以将颜色值保存在共享首选项中,然后在onCreate()中使用该共享首选项和颜色更改代码。这将使您的应用程序设置之前保存的颜色。
onCreate(){
sharedPreferences = getSharedPreferences("NAME", Context.MODE_PRIVATE);
int color = sharedPreferences.getInt("color", "DEFAULT_COLOR");
String title = sharedPreferences.getString("text", "DEFAULT_TEXT");
getSupportActionBar().setTitle(title);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(USE_THE_COLOR_VALUE_HERE)));//
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
Window window =getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.colorAccent));
}
}
然后在按钮中单击存储颜色和标题
onclick(){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor = sharedPreferences.edit();
editor.putString("text","YOUR_TEXT");
editor.putInt("color","YOUR_COLOR");
editor.commit();
}
如果在共享偏好中保存颜色时仍然遇到任何问题,可以看到
答案 2 :(得分:0)
onClick按钮颜色转换器
int color = R.color.colorPink;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(color)));
并保存onClick
SharedPreferences preferences = getSharedPreferences ("prefKey", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt ("colorValue", color);
editor.apply ();
<强>的onCreate 强>
SharedPreferences preferences = getSharedPreferences ("prefKey", Mode_Private);
int color = preferences.getInt ("colorValue", 0);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(color)));