727

1. onMeasure

a. 属于View的方法,用来测量自己和内容的来确定宽度和高度

b. view的measure方法体中会调用onMeasure

2. onLayout

a. 属于ViewGroup的方法,用来为当前ViewGroup的子元素的位置和大小

b. View的layout方法体中会调用onLayout

3.onMeasure和onLayout

onMeasure在onLayout之前调用

4. 设置background后,会重新调用onMeasure和onLayout

 

我们知道View在屏幕上显示出来要先经过measure和layout. 在调用onMeasure(int widthSpec, int heightSpec)方法时,要涉及到MeasureSpec的使用,MeasureSpec有3种模式分别是UNSPECIFIED, EXACTLY和AT_MOST, 那么这些模式和我们平时设置的layout参数fill_parent, wrap_content有什么关系呢。经过代码测试就知道,当我们设置width或height为fill_parent时,容器在布局时调用子view的measure方法传入的模式是EXACTLY,因为子view会占据剩余容器的空间,所以它大小是确定的。而当设置为wrap_content时,容器传进去的是AT_MOST, 表示子view的大小最多是多少,这样子view会根据这个上限来设置自己的尺寸。当子view的大小设置为精确值时,容器传入的是EXACTLY, 而MeasureSpec的UNSPECIFIED模式目前还没有发现在什么情况下使用。

 

整个layout过程比较容易理解,一般情况下layout过程会参考measure过程中计算得到的mMeasuredWidth和mMeasuredHeight来安排子视图在父视图中显示的位置,但这不是必须的,measure过程得到的结果可能完全没有实际用处,特别是对于一些自定义的ViewGroup,其子视图的个数、位置和大小都是固定的,这时候我们可以忽略整个measure过程,只在layout函数中传入的4个参数来安排每个子视图的具体位置。

 

// 获取分辨率
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        screenWidth = dm.widthPixels; // 当前分辨率 宽度

 

 // 获取传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
 // 震动
vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);

checkbox xml 布局

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="25dip"
    android:layout_height="25dip"
    android:button="@null"
    android:gravity="center"
    android:background="@drawable/checkboxbg_red"
    android:textColor="@color/red"
    android:textStyle="bold"/>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值