android-获取View的Width和Height-随心

来源:互联网 发布:js触发click事件 a标签 编辑:程序博客网 时间:2024/05/29 09:23
我们知道要在onCreate方法中知道某个View组件的宽度和高度等信息,而直接调用View组件的getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()、getTop()、getLeft()等方法是无法获取到真实值的,只会得到0。这是因为View组件布局要在onResume回调后完成。下面提供实现方法,onGlobalLayout回调会在布局完成时自动调用,代码如下。
button2.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {//由于这里会被调用两次,我们只需用到一次,加个标志boolean isFirst = true;public void onGlobalLayout() {if (isFirst) {int width = button2.getWidth();int height = button2.getHeight();Log6.v("getViewTreeObserver获得---width:"+width+"---height:"+height);isFirst = false;}}});
另外还有一种方法可获得到,不过获取到的都是wrap_content的大小,代码如下。
public void measureView(View child) { ViewGroup.LayoutParams p = child.getLayoutParams(); if (p == null) { p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width); int lpHeight = p.height; int childHeightSpec; if (lpHeight > 0) { childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); } else { childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } child.measure(childWidthSpec, childHeightSpec); }measureView(main_linear);width = main_linear.getMeasuredWidth();height = main_linear.getMeasuredHeight();
0 0
原创粉丝点击