获取控件(布局或View)宽度或高度的方法

原创 2015年11月21日 15:47:27

1.onCreate()/onCreateView()中是无法通过view.getHight()/getWidth()反法获取到控件的高度或宽度

因为此时控件的onMeasure()方法没有调用,本身还不知道自己的属性

2.解决方法(推荐两种)

1.设置addOnPreDrawListener()回调方法

        final ViewTreeObserver vto = view.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                int width = view.getWidth();
                int measuredWidth = view.getMeasuredWidth();
                ViewGroup.LayoutParams params = view.getLayoutParams();
                int  paramWidth = params.width;
                show.append("\n\n" + "width:" + view.getHeight() + "," + view.getWidth() +
                        "\n" + "measuredWidth:" + measuredWidth + "," + view.getMeasuredHeight() +
                        "\n" + "paramWidth:" + paramWidth);
            }
        });

其中veiw是你想测量的布局或控件,从结果中可以发现getWidth()和getMeasureWidth()方法是可以获取到控件的宽度,区别在getWidth获取的是屏幕中能看到的宽度,getMeasureWidth()是控件本身的自身宽度,还不懂可以看这里:http://blog.sina.com.cn/s/blog_6e519585010152s5.html(借鉴下,感谢您),通过LayoutParams在这里是获取到-1,所以不行,之后如果你想动态设置控件的宽或高可以通过以下方法来设置
ViewGroup.LayoutParams params = view.getLayoutParams();
                params.height = measuredWidth;
                view.setLayoutParams(params);
需要注意:
  1. LayoutParams是你需要设置的控件的父布局的LayoutParams.
  2. view.getViewTreeObserver().removeOnGlobalLayoutListe(this);需要调用,否则会调用多次

2.设置addOnPreDrawListener()回调

        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                int height = view.getMeasuredHeight();
                int width = view.getMeasuredWidth();
                view.getViewTreeObserver().removeOnPreDrawListener(this);
                int width = view.getWidth();
                int measuredWidth = view.getMeasuredWidth();

                int paramWidth = params.width;
               // show.append("\n\n" + "width:" + view.getHeight() + "," + view.getWidth() +
                 //       "\n" + "measuredWidth:" + measuredWidth + "," + view.getMeasuredHeight() +
                   //     "\n" + "paramWidth:" + paramWidth);
                //ViewGroup.LayoutParams params = view.getLayoutParams();
                //params.height = measuredWidth;
                //view.setLayoutParams(params);
                return true;
            }
        });


微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于屏幕宽.我之前在做Android的时候也会遇到图片等比例缩放的问题.应该是用图片宽高比和屏幕宽高比做判断.做个笔记. 老规矩...
  • qq_31383345
  • qq_31383345
  • 2016年11月11日 12:48
  • 21584

【微信小程序教程】动态改变view标签的宽度和高度

【微信小程序教程】动态改变view标签的宽度和高度
  • FutrueJet
  • FutrueJet
  • 2016年11月14日 13:14
  • 19138

微信小程序获取高度

wx.getSystemInfo({ success: function(res) { console.log(res.model) console.log(res.pixelRa...
  • tanmuxue
  • tanmuxue
  • 2017年01月13日 11:43
  • 8679

微信小程序image图片自适应宽度比例显示的方法

一.了解image组件 由于image有默认的固定的宽度和高度,这样我们在做图片自适应的时候,就不好做了。下面就来一起解决下 二.方法 (一).使用mode:widthFix widthFix:宽...
  • gao_xu_520
  • gao_xu_520
  • 2017年05月05日 16:52
  • 14184

微信小程序把玩(三十八)获取设备信息 API

获取设备信息这里分为四种,主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo,重力感应数据wx.onAccelerometerChange,罗盘数据w...
  • u014360817
  • u014360817
  • 2016年09月30日 07:48
  • 8349

微信小程序 获取组件数据

//wxml {{menuItem.reportType}} //js tapMainMenu: function (e) { //获取当前一级菜单标识 var index = pars...
  • xiaochun365
  • xiaochun365
  • 2017年04月05日 15:15
  • 2992

获得 View 宽高的几种方法

- 介绍获得 View 宽高的几种方法; - 说明 View.post(Runnable) 的工作原理,但不推荐使用该方法。...
  • zhaizu
  • zhaizu
  • 2016年08月09日 09:44
  • 1379

react-native获取组件的位置高度宽

measure函数可以获取当前的位置、宽、高信息; this.refs.name.measure( fn () ) fn(fx, fy, width, height, px, py...
  • z93701081
  • z93701081
  • 2017年12月27日 18:06
  • 234

微信小程序开发常用技巧(2)——页面view高度计算

微信小程序页面分为好几块,如果让高度完美占满整个窗口呢? 我们很多时候有这样一个需求:我们的页面分为上下两个部分或者更多,上半部分或用了固定的rpx设置了高度,我们想要剩下一部分的高度刚好占满剩余窗口...
  • qq_18325731
  • qq_18325731
  • 2017年07月19日 11:10
  • 7942

微信小程序,点击view获取view对应的内容

比如,在test.wxml文件中: {{item.text}}
  • sinat_31177681
  • sinat_31177681
  • 2017年03月24日 15:31
  • 10847
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取控件(布局或View)宽度或高度的方法
举报原因:
原因补充:

(最多只允许输入30个字)