view--4种Android获取View宽高的方式
有时我们会有基于这样的需求,当Activity创建时,需要获取某个View的宽高,然后进行相应的操作,但是我们在onCreate,onStart中获取View的大小,获取到的值都是0,只是由于View的绘制工程还未完成,和在onCreate中弹出Dialog或者PopupWindow会报一个Activity not running原理类似。
接下来就为大家介绍几种获取View宽高的方法:
第一种方式:重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow也可以在这里弹出,需要注意的是这个方法会调用多次,当hasFocus为true时,才可进行相应的操作
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
System.out.println("onWindowFocusChanged width="
+ tvTest.getWidth() + " height=" + tvTest.getHeight());
}
}
第二种方式:
/**
* 会执行多次
*/
private void getSize1() { ViewTreeObserver vto = tvTest.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int height = tvTest.getMeasuredHeight();
int width = tvTest.getMeasuredWidth();
System.out.println("height" + height);
System.out.println("width" + width);
return true;
} });
}
第三种方式:
private void getSize2() {
ViewTreeObserver viewTreeObserver = tvTest.getViewTreeObserver();
viewTreeObserver
.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
tvTest.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
System.out.println("onGlobalLayout width="
+ tvTest.getWidth() + " height="
+ tvTest.getHeight());
}
});
}
第四种方式:
private void getSize3() {
tvTest.post(new Runnable() { @Override
public void run() {
System.out.println("postDelayed width=" + tvTest.getWidth()
+ " height=" + tvTest.getHeight());
}
}); }
view--4种Android获取View宽高的方式的更多相关文章
- android获取屏幕宽高与获取控件宽高
获取屏幕宽高 // 获取屏幕宽高(方法1) int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素 ...
- android 获取屏幕宽高 和 获取控件坐标
一.获取屏幕宽高: (1). WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); int width ...
- Activity启动过程中获取组件宽高的五种方式
第一种:(重写Activity的onWindowFocusChanged方法) /** * 重写Acitivty的onWindowFocusChanged方法 */ @Override public ...
- Android 获取View宽度
/***************************************************************************** * Android 获取View宽度 * ...
- android中加载的html获取的宽高不正确
wap页面使用 js库是zepto,按照惯例在$(function(){})中,来获取当前可视区的宽高,但得到的宽高却与预想的相差十万八千里. 原本android手机的浏览器设定的宽高基本是360*6 ...
- Android 获取View在屏幕中的位置【转】
Android 获取View在屏幕中的位置 https://blog.csdn.net/lonely_fireworks/article/details/7849643
- Android笔记之获取显示器宽高
原先的Display.getWidth().Display.getHeight()已废弃 推荐的获取Display宽高的方法如下 DisplayMetrics metrics = new Displa ...
- JS快速获取图片宽高的方法
快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器. 我们一步一 ...
- 转载:JS快速获取图片宽高的方法
快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器. 我们一步一 ...
随机推荐
- ASP.NET中使用代码来进行备份和还原数据库
ASP.NET中使用代码来进行备份和还原数据库 SQL代码: 1 2 3 4 5 -- 备份数据库 backup database db_CSManage to disk='c:\backup.ba ...
- 【USB多路电源】layout
USB多路电源的layout 图:第一次layout 缺点: 1.散,空间利用率不高: 2.不整齐: 3.没有符合左上进,右下出(当然也不必墨守): 4.输出排针没有放到最边上: 5.信号流向问题 6 ...
- tomcat 一个项目在本机和办公室以外电脑服务器上搭建出现乱码问题
插入数据库都是???乱码 页面浏览之前在本机插入的数据都是正常的 修改conf目录下的server.xml文件 转义字符集 为 GBK 或 UTF-8 utf-8 即 添加 URIEncoding= ...
- Android通过HttpURLConnection链接到网络,并获取网络数据
1.判断网络是否连接 private void networkIsconnected(String str){ ConnectivityManager connMgr = (ConnectivityM ...
- 数据库对象映射为java对象,不使用框架
方法: public static <T> List<T> processResultSetToList(ResultSet rs, Class<T> clazz) ...
- CSS第二天总结 更多的选择符
CSS的选择符非常多,今天继续总结后面的选择符 1.id和class选择符某些情况下我们用关系选择符或者伪类选择符无法选中一些元素时,我们可以给这些元素起 个名字或者分类,这就是id和class属性. ...
- sql datetime操作
Sql Server中的日期与时间函数 SQL中的时间函数非常有用,特别是在我们进行初始赋值.复杂查询的时候,就显得特别方便. 1.获得系统当前时间 select getdate() 2.DateN ...
- C++虚函数示例
和Java不同,CDerive derive语句可以直接生成对象,不需要new关键字 重载虚函数才可以用父类引用调用子类对象,重载普通函数没有效果 #include<iostream> # ...
- equals 与 ==
Object类中,方法equals():boolean equals(Object obj) { return this==obj;} == 比较两个变量的值是否相等,对于基本类型,==直接比较变 ...
- mysql、pymysql、SQLAlchemy
1.MySQL介绍 http://www.cnblogs.com/wupeiqi/articles/5699254.html,基础操作参见此文章,此处不赘述. 安装:yum install mysql ...