Android在屏幕旋转时保存TextView背景颜色

时间:2011-10-06 17:15:52

标签: android textview

问题是,当屏幕改变方向时,textview背景颜色消失了。 这是TextView定义:

<TextView
    android:id="@+id/nomResult"
    android:layout_width="fill_parent"
    android:layout_height="80sp"
    android:text="Nom result"
    android:layout_below="@id/svitrkods"
    android:layout_alignRight="@+id/svitrkods" 
    android:layout_above="@+id/exit_button"
    android:freezesText="true"
    />

应用是库存应用。当产品已经在库存中时,我在textview中以红色背景显示文本。 vaiIrInvent.setBackgroundColor(0xfff00000);有效。但是当屏幕旋转时,背景颜色消失了...... 应用程序星星时,我保存textview defBackColor = vaiIrInvent.getBackground();的原始背景颜色 然后在应用程序中我切换到红色或默认。

if (isInInventory)
{
    vaiIrInvent.setBackgroundColor(0xfff00000);
}
else
{
    vaiIrInvent.setBackgroundDrawable(defBackColor);
}

也许有一些像android:freezesText这样的选项? 谢谢。

3 个答案:

答案 0 :(得分:1)

是的rotion调用onCreate()你需要保存信息以恢复首选项

这个链接应该解释得好一点

Saving Android Activity state using Save Instance State

答案 1 :(得分:0)

看起来您在轮换时会丢失isInInventory状态,因为在这种情况下,默认操作系统会创建一个新的Activity实例。如果是这种情况,那么最好的方法是使用Activity类公开的保存/恢复状态回调。请查看此详细信息:Saving activity state

答案 2 :(得分:0)

回答我的情况是: 屏幕方向改变时保存扫描的条形码

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  // Save entered code 
  savedInstanceState.putString("svkKods", svkKods.getText().toString());
  super.onSaveInstanceState(savedInstanceState);
}

并恢复代码并查询db。

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  String mystr = savedInstanceState.getString("svkKods");
  svkKods.setText(mystr);
  //if code presents 
  if (mystr.length() > 3) FindKods(mystr); //query database and fill all texts and variables
}

我这样做是因为在变量存储状态下,当在数据库中找到条形码然后用户可以提交更改。否则显示消息必须找到条形码......