【问题标题】:Wrong View Height/Width value on Orientation change?方向更改时的视图高度/宽度值错误?
【发布时间】:2014-07-06 02:00:07
【问题描述】:

我实现了 onConfigurationChnage(..) 以在方向配置更改时读取视图高度和宽度的值

@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 回答在这里工作:)

标签: android view screen-orientation


【解决方案1】:

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);
        }
    });
}

【讨论】:

    【解决方案2】:

    我不得不使用

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      相关资源
      最近更新 更多