【问题标题】:"onConfigurationChanged" is not called in another class“onConfigurationChanged”未在另一个类中调用
【发布时间】:2014-01-09 19:47:19
【问题描述】:

我有一个几乎覆盖整个设备屏幕的相对布局。当我改变我的手机方向时,相对布局宽度变成它的高度,反之亦然。我试图在另一个类中实现 onConfigurationChanged(它不能在主要活动中)以手动更改其宽度和高度,但它没有被调用。下面是实现:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
       // I'd change its width and height here...
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
       // ... and here.
    }

}

我也把这个放在 manifest.xml 文件中:

<activity
        android:name="br.com.dialogscreator.MySecondActivity"
        android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>

我错过了什么吗?这是我的相对布局发生的情况的图像:

谢谢你!

【问题讨论】:

  • onConfigurationChanged 仅在当前可见的活动上被调用。

标签: android


【解决方案1】:

根据Tenfour04 的提示,我在 mainActivity 中创建了一个标志来了解每个类中的屏幕方向。请看下面我是如何做到的:

public static boolean isScreenPortrait;

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        isScreenPortrait = true;
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        isScreenPortrait = false;
    }
}

然后,当我需要时,我可以从另一个类中调用该标志,例如:

if (MainActivity.isPortrait) { // Do what you want when the screen orientation is portrait.

【讨论】:

  • 更好的方法是使用SharedPreferences 存储设备方向状态。静态变量可能并不总是按照您在 Android 活动中的预期方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2013-05-18
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多