onmeasure方法里的参数说明以及用width和height中所需要注意的事项

来源:互联网 发布:postscript软件下载 编辑:程序博客网 时间:2024/05/01 01:36
@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   int measureWidth = MeasureSpec.getSize(widthMeasureSpec);   setMeasuredDimension(measureWidth, (int) (measureWidth * 6F / 7F) / count);

}

这个是比较常见的onmeasure方法下确定view宽和高的方法,它的参数是由父布局传递给子布局的,

一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。

一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,

子元素可以得到任意想要的大小;EXACTLY(完全),父元素决定自元素的确切大小,

子元素将被限定在给定的边界里而忽略它本身大小;AT_MOST(至多),子元素至多达到指定大小的值。

通过getsize()方法拿到尺寸,通过setMeasuredDimension方法进行设置。

注:在我们自定义view时,常常会拿到父布局view的尺寸,而在运行时,布局需要经过onmeasure,onlayout,ondraw方法后才会显示,在onmeasure方法执行

后才能使用width和height,不然会出现运行错误。通常这种情况有两种解决方法:

1⃣️view.getViewTreeObserver().addOnGlobalLayoutListener(new OnOnGlobalLayoutListener(){

@override

public void onGlobalLayout(){

view.getViewTreeObserver().removeGlobalLayoutListener(this);

view.getChildAt(1).getLeft() - view.getChildAt(0).getLeft();

}

});

2⃣️view.measure(0,0);

view.getMeasuredHeight();这样也能拿到测量之后的高度

0 0
原创粉丝点击