android获取控件宽和高
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获取控件宽和高相关推荐
- android 获取控件在屏幕中的坐标
今天,简单讲讲android如何获取控件在屏幕中的坐标. 这个其实也很简单,但是昨天做一个功能时,需要功能控件的坐标做一些逻辑操作时,居然不知道怎么做.所以在网上查找了资料后,解决了这个问题.这里记录 ...
- android获取屏幕宽高与获取控件宽高
1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...
- android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)
1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px ...
- android 获取控件高度_安卓开发入门教程UI控件_ImageView
什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...
- android 获取控件高度_安卓开发入门教程UI控件_ProgressBar
什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...
- android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id
背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...
- android获取控件的id(标识符)-根据控件id获取对应的值或控件名字-动态获取R.string的值
更多其他页面-自定义View-实用功能合集:点击查看 项目中需要动态获取资源R.string的值,记录一下解决方案. demo链接: link. 直接先上个示例,下面再有详细解说: @Override ...
- Android 在onCreate()方法中获取控件宽高值为0解决方案
大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...
- android获取控件宽度高度
前几天,在自定义控件的时候碰到个问题,就是在如何获取自定义控件的高宽.在自定义控件类的构造函数中,本来以为可以轻松获取,但事实不是这样.我测试了下面代码: 先是布局代码: <com.lml.ge ...
最新文章
- 辞职后五险一金的处理方式
- web应用的负载均衡、集群、高可用(HA)解决方案
- [总结]Asp.net中的页面乱码的问题
- Oracle入门(五F)之11g show spparameter 命令的使用
- linux 列出当前视频设备,如何获取Linux(ubuntu)上的视频捕获设备(网络摄像机)列表?(C / C ++)...
- 银行家算法 计算机操作系统,计算机操作系统 银行家算法.doc
- 计算机应用技术专业盲打键盘,一种双手八指轨道定键位盲打器与盲打键盘
- eclipse在线安装ivy和ivyde
- 说文解字 —— 汉字的构成及语义的变化
- python程序员工资-Python工资高还是Java?
- python 文件读写 newline_「Python」:文件读写
- 走进WPF之开发类似Visio软件
- Xenu's Link Sleuth 的使用
- flash 水墨表现(转)
- 我见过最NB的鼠标-鼠标放进PC卡插槽 惠普卡片蓝牙鼠试用
- 学习Vue3 第五章(Vue核心虚拟Dom和 diff 算法)
- HMM隐马尔可夫模型进行中文文本分词
- Minix进程间通信分析
- Anaconda3 下载安装教程(Windows)
- 单片机课程学习的数字时钟系统模块化设计研究