在方向更改上保存 TextView 的设置 - Android?

Posted

技术标签:

【中文标题】在方向更改上保存 TextView 的设置 - Android?【英文标题】:Saving TextView's settings on Orientation Changes - Android? 【发布时间】:2013-08-19 09:48:07 【问题描述】:

我正在我的应用程序中动态设置 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 中定义的那个,白色背景上的黑色文本..)

怎么了?

谢谢!

【问题讨论】:

【参考方案1】:

将它们保存在包中

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

它会在Activity onCreate中恢复。

@Override
protected void onCreate (Bundle savedInstanceState) 
   CFlag = savedInstanceState.getBoolean("CFLAG");

【讨论】:

我应该保存什么? ...我的布尔 Cflag 在 OnCreate() 之外...在活动块中...所以它保持不变对吗?但是当我更新它时,它不起作用.. :/ 我只需要这个变量来设置颜色... 除非您将 android:configChanges 指定为 kalyanpvs 建议轮换活动被杀死并创建新的。所以 CFlag 将具有默认值。我已经更新了答案。

以上是关于在方向更改上保存 TextView 的设置 - Android?的主要内容,如果未能解决你的问题,请参考以下文章

Android 怎么旋转TextView文字显示方向

Android在方向上保存视图位置已更改[重复]

在从 NSMutableDictionary 加载的 textview 中保存更改的文本

全局字体设置 老年模式

保存图像后由于方向更改导致 Android 显示图像捕获错误

在小部件中单击 textview 时更改图标