0

我正在使用单个选项菜单按钮“切换颜色”在我的应用程序中动态设置 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 是“全局”布尔值,取决于函数设置文本视图颜色的真/假。(如果它是白底黑字,则将其设置为黑底白字……反之亦然)

在做了一些研究之后,这里是我修改的额外功能: 由于在方向更改时,应用程序会暂停和恢复,我修改了 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 中定义的那个,白色背景上的黑色文本..)

怎么了?

谢谢 !

4

1 回答 1

0

将它们保存在捆绑包中

@Override
protected void onSaveInstanceState (Bundle outState) {
    outState.putBoolean("CFLAG",CFlag);
}

并且会在Activity onCreate中恢复。

@Override
protected void onCreate (Bundle savedInstanceState) {
   CFlag = savedInstanceState.getBoolean("CFLAG");
}
于 2013-08-19T09:52:29.650 回答