为了避免在屏幕方向改变时再次运行 onCreate(),我将以下内容放入我的 Android 清单中:
android:configChanges="orientation|keyboardHidden|screenSize"
没关系。但是我仍然希望能够旋转屏幕,只是改变方向但不再经历 onCreate->onStart->etc 生命周期。
我像这样覆盖了 onConfigurationChanged 方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
这很好用。但是,我有一个背景图像,需要根据设备是处于纵向模式还是横向模式来更改。我尝试将以下行添加到我的代码中:
mBackground.setBackgroundResource(R.drawable.splash_bg);
这样做的目的是重新加载 splash_bg 资源,因为方向已经改变,所以它会在 drawable-land 文件夹中查找图像。
所以方法现在看起来像这样:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mBackground.setBackgroundResource(R.drawable.splash_bg);
}
但它并不完全正确。在最初以纵向模式启动设备后,纵向背景图像会显示。旋转它(进入横向模式)将成功地将背景图像从纵向背景更改为横向背景(在可绘制区域中找到的那个)。反过来也是如此(如果您从横向开始并切换到纵向),因为我还在 drawable-port 文件夹中包含了背景图像的纵向模式版本(在普通 ol'drawable 文件夹的顶部)。
所以在初始旋转时它工作正常。但是,如果您将方向切换回您开始的位置,它不会将图像刷新到正确的方向类型。基本上它只工作一次。
有人对此有想法吗?如有必要,我会提供更多代码,但我认为我包含了所有需要的代码。谢谢!