android – 方向改变时错误的视图高度/宽度值?

前端之家收集整理的这篇文章主要介绍了android – 方向改变时错误的视图高度/宽度值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我实现了onConfigurationChnage(..)来读取方向配置chnage上的视图高度和宽度值
@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的屏幕宽度/高度正确,但同样不适用于任何视图.

任何人都有想法..如何在方向变化上得到正确的价值?

解决方法

getWidth()在View布局时返回宽度,这意味着您需要等到它被绘制到屏幕上.在重新绘制新配置的视图之前调用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);
        }
    });
}
原文链接:https://www.f2er.com/android/317342.html

猜你在找的Android相关文章