方向变化时的错误高度

Wrong heigth of view on orientation change

我正在构建一个应用程序,我正在尝试在应用程序底部设置智能 admob 横幅。在底部有一个 FrameLayout 将充当广告容器。

我有 2 个布局文件,一个用于纵向,一个用于横向。纵向包含一个 FrameLayout,高度为 50dp,横向包含 32dp(根据 google 的指南)。

这工作正常,但由于我的 activity 在 onCreate 中做了很多事情,我不得不在我的 activity 配置中按顺序添加 android:configChanges="orientation|screenSize"以防止每次旋转设备时调用 onCreate。

但是,现在当我的视图旋转时,FrameLayout (adContainer) 保持 50dp 高。

如何强制特定布局在方向更改时从 XML 重新绘制并获得正确的高度?

我已经尝试使 onConfigurationChanged 中的 FrameLayout 无效,但我的布局仍然保持 50dp 高。谢谢

通过设置 configChanges,您告诉系统您不想自动切换布局,因此您只能使用一种纵向和横向布局。

您要么必须修复代码,使其在方向更改时正常工作,要么在旋转设备时手动将包含您的广告的视图更改为备用 size\location。

最好的解决方案通常是重构您的代码,以便启用正确的定向过程。即不锁定 configChanges 属性。

https://developer.android.com/guide/topics/resources/runtime-changes.html

您可以在onConfigurationChanged中使用setContentView来切换布局

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.activity_main);
}