目前我正在更新我的应用程序资金是我遇到以下问题的时间。我想支持横向和纵向,所以我创建了两种不同的布局。
我的第一个问题是,旋转后应用程序重新启动并且设置的数字被刷新。
在 stackoverflow 上找到这个问题后,这很容易解决。
我已经针对该问题实施了以下解决方案:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setGui();
}
我已经使用以下代码对其进行了测试,其中轮子的布局根据布局进行了调整。一切都像它应该的那样工作。当我改变方向时,数字不会改变。
public void setGui() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
initWheel(R.id.money1, 0, 9, "%1d", moneyWidthPortrait, textSizePortrait);
...
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
initWheel(R.id.money1, 0, 9, "%1d", moneyWidthLandscape, textSizeLandscape);
...
}
}
但我也想更改背景和布局(填充和边距),所以我添加了以下两行:
public void setGui() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(portrait);
...
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(landscape);
...
}
}
但是在调用 setContentView 之后,所有数据似乎再次丢失,并且在更改手机方向后轮子被重置为零。
避免在方向和布局更改期间将轮子重置为“0”的最佳方法是什么?
编辑:回答后编辑
我已删除:
android:configChanges="keyboardHidden|orientation"
并补充说:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("WheelMoney1", getWheelValue(R.id.money1));
...
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
getWheel(R.id.money1).setCurrentItem(savedInstanceState.getInt("WheelMoney1"), false);
...
}
并实现layout-land
和layout-port
处理两种不同的布局。