屏幕旋转时视图高度/宽度值错误?

8

我实现了onConfigurationChange(..)方法,以在屏幕方向改变时读取视图高度和宽度的值。

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

        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;
        int width = displaymetrics.widthPixels;

        Log.i(TAG, "onConfigurationChanged: "+newConfig.orientation+", "+height+", "+width + ", "+mTempeFrameLayout.getWidth());
    }

但它总是回复旧值,如果方向改变,则会给出最后一个方向(可能)的值。

使用displaymetrics获取屏幕宽度/高度可以正常显示,但对于任何视图都不起作用。

有人有想法吗?如何在方向更改时获得正确的值?


@Sanket990 没有起作用,亲爱的...但是Nitesh的答案在这里起作用 :) - CoDe
2个回答

17

getWidth()返回视图布局时的宽度,这意味着您需要等待其绘制到屏幕上。onConfigurationChanged在为新配置重新绘制视图之前调用,因此我认为您直到稍后才能获得新的宽度。

@Override
public void onConfigurationChanged(Configuration newConfiguration) {
    super.onConfigurationChanged(newConfiguration);
    final View view = findViewById(R.id.scrollview);

    ViewTreeObserver observer = view.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            Log.v(TAG,
                    String.format("new width=%d; new height=%d", view.getWidth(),
                            view.getHeight()));
            view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
}

0

我必须使用

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

        view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                configHome();
                view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        });

  }
}

因为上面的答案对我不起作用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接