如何在onRestoreInstanceState()中设置视图的背景颜色

时间:2013-02-09 03:51:46

标签: android view background-color oncreate

我目前正在尝试学习使用视图和状态。我通常能够在如下功能中设置颜色:

    View mColorRegion = findViewById(R.id.color_region);
    mColorRegion.setBackgroundColor(Color.CYAN);

但是,我似乎无法在 onRestoreInstanceState()中设置颜色,因为

     mColorRegion.setBackgroundColor(savedInstanceState.getInt("color"));

但是,使用与TextView相同的View,我可以恢复文本,如下所示:

    TextView mText = (TextView)findViewById(R.id.color_region);
    mText.setText(savedInstanceState.getString("text");

有什么区别,以及如何在 onRestoreInstanceState()中设置背景颜色?



编辑:自从原帖以来,我注意到了两件事:


1)mColorRegion.setBackgroundColor(Color.CYAN)似乎无法在 onCreate()中使用。

2)即使以下功能在按下按钮时正确更改了视图颜色,但如果我直接从 onRestoreInstanceState()调用它,它也不起作用:

    public void centerButton1(View clickedButton) {
        mColorRegion.setBackgroundColor(Color.CYAN);
    }

嗯...

2 个答案:

答案 0 :(得分:0)

所以我找到了“半解决方案”。如果将以下行添加到 AndroidManifest.xml ,它将在方向更改期间保留颜色:

     android:configChanges="orientation|screenSize"


但是,这仍然无法解答为什么我可以设置文本而不是 onRetoreInstanceState() onCreate() ...

中的颜色

答案 1 :(得分:0)

许多人对使用android:configChanges="orientation|screenSize"感到不满,例如Google's Dianne Hackborn。首先,它将使您的应用程序的多个布局之间的切换过程非常困难(例如,如果您想要一个横向布局,一个用于肖像),因为您将不得不完成Android通常所做的所有工作在 onConfigurationChanged()中自动为您服务。

无论如何,我也遇到过这种问题。我正在创建一个DialogPreference,并且在轮换时我无法在 onRestoreInstanceState(savedInstanceBundle)中更改 SeekBar 的进度...所以如果你不能这就是我的建议使用 onCreate(savedInstanceBundle) onActivityCreated(savedInstanceBundle)(对于片段)来恢复视图对象的状态:

1)创建一个名为“mRestoredBGColor”的私有类成员,

private int mRestoredBGColor = -1;

2) onRestoreInstanceState()中:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) 
       mRestoredBGColor = savedInstanceState.getInt("key_you_used_in_onSaveInstanceState");
}

3)然后在 onResume()中,因为在onStart()之后调用onRestoreInstanceState(),但在onResume()之前调用

@Override
public void onResume(){
   super.onResume();
   if(mColorRegion != null && mRestoredBGColor != -1){
       mColorRegion.setBackgroundColor(mRestoredBGColor);
       mRestoredBGColor = -1; //to make sure it only sets this once per rotation.
   }
}

希望这有助于某人。我相信除了使用android:configChanges="orientation|screenSize"之外,总会有另一种方式(除非您希望快速旋转WebView ...)。