gpt4 book ai didi

android - 屏幕方向改变后刷新资源

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:00 25 4
gpt4 key购买 nike

为了避免在屏幕方向改变时再次运行 onCreate(),我将以下内容放入我的 Android list 中:

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-land 中找到的那个)。反之亦然(如果你从横向开始然后切换到纵向),因为我还在 drawable-port 文件夹中包含了背景图像的纵向模式版本(在普通的 ol'drawable 文件夹之上)。

所以在初始旋转时它工作正常。但是,如果您将方向切换回您开始的位置,它不会将图像刷新为正确的方向类型。基本上它只工作一次。

有人对此有想法吗?如有必要,我会提供更多代码,但我认为我包含了所有需要的代码。谢谢!

最佳答案

首先,不要使用configChanges。那是懒惰的出路,将来会害了你。 Drawables 被缓存,所以这很可能导致获取正确的方向图像的问题(这可以解释为什么它只工作一次而不是之后)。您可以通过使用两个可绘制对象来解决这个问题——一个名为 splash_bg_port,一个名为 splash_bg_land,然后使用它们,切换您从 newConfig 接收到的方向。

此外,如果您的 splash_bg 是带有位图项的图层列表,我注意到有时在您第一次访问可绘制对象后它不会从正确的资源文件夹中提取(由于缓存)。

关于android - 屏幕方向改变后刷新资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com