我使用单个选项菜单按钮“切换颜色”动态设置应用中textview组件的背景颜色和文本颜色
问题是,一旦方向改变了textview“忘记”它应该使用的颜色......所以它使用默认而不是选项菜单设置的那些。
以下是选项菜单选项的原始功能:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
TextView textView = (TextView) findViewById(R.id.xxtt);
if (Cflag) {
textView.setBackgroundColor(Color.parseColor("#ffffff"));
textView.setTextColor(Color.parseColor("#000000"));
Cflag= false;
} else {
textView.setBackgroundColor(Color.parseColor("#000000"));
textView.setTextColor(Color.parseColor("#ffffff"));
Cflag= true;
}
return super.onOptionsItemSelected(item);
}
^ Cflag是“全局”布尔值,取决于函数是否为true / false设置textviews颜色。 (如果它是白色的黑色,则将其设置为黑色背景上的白色文本......反之亦然)
经过一番研究后,我修改了以下额外功能: 由于在方向更改时,应用程序暂停并恢复,我修改onResume以根据变量Cflag独立更改颜色。
还有OnCofigChange,用于在方向改变时更新颜色。我尝试过使用这两种功能,我一次尝试过使用它们。什么都没有帮助。
@Override
protected void onResume() {
TextView textView = (TextView) findViewById(R.id.xxtt);
if (Cflag) {
textView.setBackgroundColor(Color.parseColor("#ffffff"));
textView.setTextColor(Color.parseColor("#000000"));
} else {
textView.setBackgroundColor(Color.parseColor("#000000"));
textView.setTextColor(Color.parseColor("#ffffff"));
}
super.onResume();
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
TextView textView = (TextView) findViewById(R.id.xxtt);
if (Cflag) {
textView.setBackgroundColor(Color.parseColor("#ffffff"));
textView.setTextColor(Color.parseColor("#000000"));
} else {
textView.setBackgroundColor(Color.parseColor("#000000"));
textView.setTextColor(Color.parseColor("#ffffff"));
}
}
我不想不必要地使用SharedPreferences对象。
我认为这只是逻辑问题,
如果它是白色背景上的黑色文字(默认)....按选项菜单的选项,它切换到黑色背景上的白色文字.... Cflag变量也被切换。
现在Cflag是常量,我们只需要根据Cflag再次设置文本颜色。
但是我无法让它工作:我在一个方向更改设置,在切换方向上它会回到默认状态(我在XML中定义的那个,在白色背景上的黑色文本..)
怎么了?
谢谢!
答案 0 :(得分:0)
将它们保存在捆绑包中
@Override
protected void onSaveInstanceState (Bundle outState) {
outState.putBoolean("CFLAG",CFlag);
}
它将在Activity onCreate中恢复。
@Override
protected void onCreate (Bundle savedInstanceState) {
CFlag = savedInstanceState.getBoolean("CFLAG");
}