在方向更改上保存 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?的主要内容,如果未能解决你的问题,请参考以下文章
在从 NSMutableDictionary 加载的 textview 中保存更改的文本