自定義View-2-重寫onMeasure

效果圖

這裏寫圖片描述

佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#003839"
        android:gravity="center"
        android:visibility="visible"
        android:text="SECOND"/>

    <com.pengkv.apple.weight.FirstView
        android:layout_width="wrap_content"
        android:visibility="visible"
        android:background="#888787"
        android:layout_height="wrap_content"/>

</LinearLayout>

View代碼

public class FirstView extends LinearLayout {

    public FirstView(Context context) {//代碼實例化的時候調用
        super(context);
    }

    public FirstView(Context context, AttributeSet attrs) {//佈局文件引用的時候調用
        super(context, attrs);
    }

    public FirstView(Context context, AttributeSet attrs, int defStyleAttr) {//自定義屬性值的時候調用
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        super.onMeasure(widthMeasureSpec,heightMeasureSpec);
        setMeasuredDimension(measureSpec(widthMeasureSpec),measureSpec(heightMeasureSpec)); //重測尺寸
    }

    public int measureSpec(int measureSpec){
        int result=0;
        int specMode=MeasureSpec.getMode(measureSpec);//獲取測量模式
        int specSize=MeasureSpec.getSize(measureSpec);//獲取測量尺寸

        if (specMode==MeasureSpec.EXACTLY){//精確模式:包括準確設置dp值和match_parent
            result=specSize;
        }else {
            result=400;//默認設置的尺寸
            if (specMode==MeasureSpec.AT_MOST){
                result=Math.min(result,specSize);
            }
        }
        return result;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章