Android获取控件宽高

在项目中用到了测量控件的宽和高,这个在Activity的onCreate去使用控件的getHeight()和getWidth()方法去获取是会失败的,返回的都是0。这是由于在onCreate()的时候,控件都没有完成被绘制出来,所以这个时候使用上面的方法去获取是不可行的。
解决办法是有的,第一种办法是注册OnPreDrawListener,OnPreDrawListener是ViewTreeObserver内部定义的接口,该方法在绘制视图前执行,这个时候所有的视图都已经测量完成,通过该回调接口可以获取控件宽高。ViewTreeObserver通过getViewTreeObserver()方法获取,不能直接实例化。使用这种办法会多次回调,并不十分友好。

final ViewTreeObserver vto1 = tvTest.getViewTreeObserver();
vto1.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {public boolean onPreDraw() {tvTest2.setText("OnPreDrawListener   宽:" + tvTest.getMeasuredWidth() + " 高: " + tvTest.getMeasuredHeight());return true;}
});

第二种办法:注册OnGlobalLayoutListener监听,OnGlobalLayoutListener是ViewTreeObserver内部定义的接口,当视图布局发生改变的时候回调该接口,ViewTreeObserver通过getViewTreeObserver()方法获取,不能直接实例化。

ViewTreeObserver vto2 =tvTest.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {tvTest.getViewTreeObserver().removeGlobalOnLayoutListener(this);tvTest3.setText("OnPreDrawListener   宽:" + tvTest.getWidth() + " 高: " + tvTest.getHeight());}
});

第三方办法是在onCreate()中自己去测量控件的宽度和高度,测试代码如下:

int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
tvTest.measure(w, h);
tvTest4.setText("OnPreDrawListener   宽:" + tvTest.getMeasuredWidth() + " 高: " + tvTest.getMeasuredHeight());

这种方法测量的数据和前面两种存在偏差,具体原因还需要深入研究,在项目里面采用的是第一种方法,效果还是很不错的。

android获取控件宽和高相关推荐

  1. android 获取控件在屏幕中的坐标

    今天,简单讲讲android如何获取控件在屏幕中的坐标. 这个其实也很简单,但是昨天做一个功能时,需要功能控件的坐标做一些逻辑操作时,居然不知道怎么做.所以在网上查找了资料后,解决了这个问题.这里记录 ...

  2. android获取屏幕宽高与获取控件宽高

    1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...

  3. android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)

    1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...

  4. android 获取控件高度_安卓开发入门教程UI控件_ImageView

    什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...

  5. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

  6. android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id

    背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...

  7. android获取控件的id(标识符)-根据控件id获取对应的值或控件名字-动态获取R.string的值

    更多其他页面-自定义View-实用功能合集:点击查看 项目中需要动态获取资源R.string的值,记录一下解决方案. demo链接: link. 直接先上个示例,下面再有详细解说: @Override ...

  8. Android 在onCreate()方法中获取控件宽高值为0解决方案

    大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...

  9. android获取控件宽度高度

    前几天,在自定义控件的时候碰到个问题,就是在如何获取自定义控件的高宽.在自定义控件类的构造函数中,本来以为可以轻松获取,但事实不是这样.我测试了下面代码: 先是布局代码: <com.lml.ge ...

最新文章

  1. 辞职后五险一金的处理方式
  2. web应用的负载均衡、集群、高可用(HA)解决方案
  3. [总结]Asp.net中的页面乱码的问题
  4. Oracle入门(五F)之11g show spparameter 命令的使用
  5. linux 列出当前视频设备,如何获取Linux(ubuntu)上的视频捕获设备(网络摄像机)列表?(C / C ++)...
  6. 银行家算法 计算机操作系统,计算机操作系统 银行家算法.doc
  7. 计算机应用技术专业盲打键盘,一种双手八指轨道定键位盲打器与盲打键盘
  8. eclipse在线安装ivy和ivyde
  9. 说文解字 —— 汉字的构成及语义的变化
  10. python程序员工资-Python工资高还是Java?
  11. python 文件读写 newline_「Python」:文件读写
  12. 走进WPF之开发类似Visio软件
  13. Xenu's Link Sleuth 的使用
  14. flash 水墨表现(转)
  15. 我见过最NB的鼠标-鼠标放进PC卡插槽 惠普卡片蓝牙鼠试用
  16. 学习Vue3 第五章(Vue核心虚拟Dom和 diff 算法)
  17. HMM隐马尔可夫模型进行中文文本分词
  18. Minix进程间通信分析
  19. Anaconda3 下载安装教程(Windows)
  20. 单片机课程学习的数字时钟系统模块化设计研究

热门文章

  1. PTA 7-1 旅游规划 (25分) 数据结构 Floyd
  2. 控制学习笔记(1)——反步控制法
  3. 高中数学排列组合二项定理经典题型汇编(名师总结)
  4. 「高频面试题」浏览器从输入url到页面展示中间发生了什么
  5. 多模态交互的概念与现状
  6. Proteus实现555计时器模拟简易电子琴
  7. 用74LS73设计四位二进制加法计数器和8421BCD加法计数器
  8. Linux网卡驱动(3)-网卡驱动深层分析
  9. 指标实现层级_有了指标怎么用层次分析法建立模型?
  10. wxpython制作桌面悬浮球