如何在onRestoreInstanceState()中设置视图的背景颜色
我目前正在尝试学习如何使用视图和状态。我通常能够在下面的设置其颜色的功能,如:如何在onRestoreInstanceState()中设置视图的背景颜色
View mColorRegion = findViewById(R.id.color_region);
mColorRegion.setBackgroundColor(Color.CYAN);
不过,我似乎无法能够设置颜色在onRestoreInstanceState(),作为
mColorRegion.setBackgroundColor(savedInstanceState.getInt("color"));
然而,与同观为一个TextView工作,我能够恢复文本如下所示:
TextView mText = (TextView)findViewById(R.id.color_region);
mText.setText(savedInstanceState.getString("text");
有什么区别,我怎么可以设置backg圆形颜色onRestoreInstanceState()?
编辑:由于原来的职位,我注意到两两件事:
1)mColorRegion.setBackgroundColor(Color.CYAN)
似乎并不的onCreate()工作无论是。
2)即使当按下一个按钮下面的函数正确地更改视图的颜色,它不一样,如果我直接从onRestoreInstanceState(称之为工作):
public void centerButton1(View clickedButton) {
mColorRegion.setBackgroundColor(Color.CYAN);
}
嗯...
所以我找到了“半解决方案”。如果您添加以下行至AndroidManifest.xml中,它会在方向变化保持颜色:
android:configChanges="orientation|screenSize"
但是,这仍然没有回答为什么我可以设置文本,但不颜色onRetoreInstanceState()或的onCreate() ...
很多人看不惯使用android:configChanges="orientation|screenSize"
,像Google's Dianne Hackborn。首先,它会让您的应用程序在多个布局之间切换的过程非常困难(例如,如果您想要一个横向布局和一个纵向布局),因为您必须完成Android通常所做的所有工作自动为您在onConfigurationChanged()。
无论如何,我也有这样的问题。我正在创建一个DialogPreference,并且在轮换后,我无法更改 SeekBar的onRestoreInstanceState(savedInstanceBundle)的进度...所以这是我的建议,如果你不能使用的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(),因为onRestoreInstanceState()被调用onStart()之后调用,但之前的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"
之外,总有另一种方式(除非你想快速旋转WebViews)。