相关疑难解决方法(0)

为什么onLayout和onSizeChanged会在方向更改时被调用两次?

我注意到,当从一个Activity处理配置更改时,onLayout和onSizeChanged会在方向更改后立即连续调用两次,无论是从landscape-> portrait还是从portrait-> landscape.此外,第一个onLayout/onSizeChanged包含维度(在旋转之前),而第二个onLayout/onSizeChanged包含(正确)维度.

有谁知道为什么,和/或如何解决这个问题?似乎在配置更改后很长一段时间内屏幕尺寸发生了变化 - 也就是说,在onConfigurationChanged调用配置更改后立即尺寸不正确?

这是下面代码的调试输出,显示从Portrait到Landscape旋转后的onLayout/onSizeChanged调用(请注意,设备为540x960,因此横向宽度应为960,纵向宽度为540):

03-13 17:36:21.140: DEBUG/RotateTest(27765): onConfigurationChanged: LANDSCAPE
03-13 17:36:21.169: DEBUG/RotateTest(27765): onSizeChanged:540,884,0,0
03-13 17:36:21.189: DEBUG/RotateTest(27765): onLayout:true-0,0,540,884
03-13 17:36:21.239: DEBUG/RotateTest(27765): onSizeChanged:960,464,540,884
03-13 17:36:21.259: DEBUG/RotateTest(27765): onLayout:true-0,0,960,464
Run Code Online (Sandbox Code Playgroud)

另请注意,第一个onSizeChanged oldwidth和oldheight为0,表示我们刚刚添加到视图层次结构中 - 但是景观的尺寸错误!

以下是说明此行为的代码:

MyActivity.java

package com.example;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.FrameLayout;

public class MyActivity extends Activity
{
    private static String TAG = "RotateTest";

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        Log.d(TAG, "onConfigurationChanged: " + (newConfig.orientation == …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-configchanges android-orientation

10
推荐指数
1
解决办法
1万
查看次数