【问题标题】:What is called after onConfigurationchanged() methodonConfigurationchanged() 方法后调用什么
【发布时间】:2013-07-26 08:04:20
【问题描述】:

屏幕旋转后,其中一个视图对象的高度发生了变化,我想知道以像素为单位的高度值。

onConfigurationChanged 方法可能在视图完成旋转之前调用。所以如果我用这种方法测量视图大小,大小仍然是之前旋转的值。

问题是如何在不重建Activity的情况下获得旋转完成后的视图大小值。

【问题讨论】:

  • 您可以随时在OnResume() 方法中检查这一点,因为它是在轮换之后调用的。
  • 感谢您的回答。似乎没有运行 OnResume() 方法,因为我在 AndroidManifest.xml 文件中使用了 android:configChanges="orientation|screenSize"。我在 OnResume 中设置了断点,但没有停止。

标签: java android onconfigurationchanged


【解决方案1】:

一种可能的解决方案:

private int viewHeight = 0;
View view = findViewByID(R.id.idOfTheView);
view.getViewTreeObserver().addOnGlobalLayoutListener( 
    new OnGlobalLayoutListener(){
        @Override
        public void onGlobalLayout() {
            viewHeight = view.getHeight();
        }

@Override
public void onResume(){
  int viewHeight = 0;
  View view = findViewByID(R.id.idOfTheView);
  viewHeight  = view.getHeight();
}

【讨论】:

  • 感谢您的回答,我认为 onResume() 不会运行,因为我在 AndroidManifest.xml 文件中设置了 android:configChanges="orientation|screenSize"。我会研究 OnGlobalLayoutListener 的方式。
  • OnResume() 在方向改变时总是被调用,因为整个 Activity 被重新创建。
  • 我刚刚再次阅读了关于旋转的编程指南文章。上面说API级别12以上,配置改变不会重启你的Activity,参考地址是developer.android.com/guide/topics/resources/…这篇文章有这样一段话现在,当其中一个配置改变时,MyActivity不会重启。相反,MyActivity 收到对 onConfigurationChanged() 的调用。 ......
  • 谢谢,问题通过添加GlobalLayoutListener解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多