1. 程式人生 > >獲取view的寬高工具類,很方便!

獲取view的寬高工具類,很方便!

好久沒有寫筆記,今天來記錄一下。開發中經常遇到需要獲取某個view的寬高,或者需要動態設定某個view的寬高為原來的一半,三分之一等等。獲取view的寬高,有多種方法,網上都可以搜尋到。感覺每次獲取寬高都要重新寫一遍,有點麻煩,所以封裝一下,用到時候呼叫就好。話不多說,上程式碼。

import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;


/**
 *
 *  描述: 佈局引數設定工具類
 *  created: 2018/6/14/014  17:57  more
 *
 **/
public class LayoutParamerUtils {

    /**
     *
     *  描述: 設定 view 高度 為父佈局高度的 百分比
     *  created: 2018/6/14/014  17:54
     *
     **/
    public static void setLayoutParamers2View(View view, int heightParent, double rateDouble) {

        if(view == null){
            return;
        }

        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();

        layoutParams.height = (int)(heightParent * rateDouble);

        view.setLayoutParams(layoutParams);
    }


    /**
     *
     *  描述: 設定 view 寬度,高度 高度
     *  created: 2018/6/14/014  17:54
     *
     **/
    public static void setLayoutParamers2ViewHW(View view, int height) {

        if(view == null){
            return;
        }

        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();

        layoutParams.width = height;

        layoutParams.height = height;

        view.setLayoutParams(layoutParams);
    }


    /**
     *
     *  描述: 獲取 指定view 的 viewTreeObserver
     *  created: 2018/6/14/014  18:49
     *
     **/
    public static void getViewObserver(final View viewtest, final ViewObserverListener viewObserverListener) {

        if(viewtest == null){
            return;
        }

        viewtest.getViewTreeObserver().addOnGlobalLayoutListener(new  ViewTreeObserver.OnGlobalLayoutListener(){
            @Override
            public void onGlobalLayout() {

                viewtest.getViewTreeObserver().removeOnGlobalLayoutListener(this);

                if(viewObserverListener != null){
                    viewObserverListener.onViewObserverResult();
                }
            }
        });
    }

    /**
     *
     *  描述: getViewObserver 回撥介面
     *  created: 2018/6/14/014  18:54
     *
     **/
    public interface ViewObserverListener{
        void onViewObserverResult();
    }
}

使用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

    LayoutParamerUtils.getViewObserver(findViewById(R.id.xxx), new LayoutParamerUtils.ViewObserverListener() {
        @Override
        public void onViewObserverResult() {

          LogUtils.logMe("寬:" + binding.drawerLayout.getWidth() + ",高:" +  binding.drawerLayout.getHeight() + ", 密度:" + DisplayUtil.getDensity(MainActivity.this));

        }
    });
}

如此甚好!