Activity中获取view的高度和宽度方法
来源:互联网 发布:2017最新网络综艺节目 编辑:程序博客网 时间:2024/05/17 03:48
本文载自 : http://blog.csdn.net/nailsoul/article/details/25909313
在activity中可以调用View.getWidth()、View.getHeight()、View.getMeasuredWidth() 、View.getgetMeasuredHeight()
来获得某个view的宽度或高度。
但是在onCreate()、onStrart()、onResume()方法中会返回0,这是应为当前activity所
代表的界面还没显示出来没有添加到WindowPhone的DecorView上或要获取的view没
有被添加到DecorView上或者该View的visibility属性为gone 或者该view的width或height真的为0
所以只有上述条件都不成立时才能得到非0的width和height
要获取到的width和height为真实有效的有一下几种方法
- 在该View的事件回调里使用 这时候该view已经被显示即被添加到DecorView上 如点击事件 触摸事件 焦点事件等
View view=findViewById(R.id.tv); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int width = v.getWidth(); } });
- 在activity被显示出来时即添加到了DecorView上时获取宽和高如onWindowFocusChanged() 回调方法
@Override public void onWindowFocusChanged(boolean hasFocus) { View iv1 = findViewById(R.id.iv1); View iv2=findViewById(R.id.iv2); String msg1="iv1' width:"+iv1.getWidth()+" height:"+iv1.getHeight(); String msg2="iv2' width:"+iv2.getWidth()+" height:"+iv2.getHeight(); System.out.println(msg1); System.out.println(msg2); super.onWindowFocusChanged(hasFocus); }
- 或在onResume方法最后开线程300毫秒左右后获取宽和高 因为onResume执行完后300毫秒后 界面就显示出来了
view.postDelayed(new Runnable() { @Override public void run() { View iv1 = findViewById(R.id.iv1); View iv2=findViewById(R.id.iv2); String msg1="iv1' width:"+iv1.getWidth()+" height:"+iv1.getHeight()+" measuredWidth:"+iv1.getMeasuredWidth()+"measuredHeight:"+iv1.getMeasuredHeight(); String msg2="iv2' width:"+iv2.getWidth()+" height:"+iv2.getHeight()+" measuredWidth:"+iv2.getMeasuredWidth()+"measuredHeight:"+iv2.getMeasuredHeight(); i("onWindowFocusChanged() "+msg1); i("onWindowFocusChanged() "+msg2); } }, 300);
- 4.在onCreate()或onResume()等方法中需要获取宽高时使用getViewTreeObserver().addOnGlobalLayoutListener()来添为view加回调在回调里获得宽度或者高度获取完后让view删除该回调
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { view.postDelayed(new Runnable() { @Override public void run() { View iv1 = findViewById(R.id.iv1); View iv2=findViewById(R.id.iv2); String msg1="iv1' width:"+iv1.getWidth()+" height:"+iv1.getHeight()+" measuredWidth:"+iv1.getMeasuredWidth()+"measuredHeight:"+iv1.getMeasuredHeight(); String msg2="iv2' width:"+iv2.getWidth()+" height:"+iv2.getHeight()+" measuredWidth:"+iv2.getMeasuredWidth()+"measuredHeight:"+iv2.getMeasuredHeight(); i("onWindowFocusChanged() "+msg1); i("onWindowFocusChanged() "+msg2); } }, 300); } });
- 在窗口焦点发生变化时获取宽高 onResume完后就会把界面渲染到窗口上 渲染完后将执行窗口焦点花生变化回调 所以onResume到 onWindowFocusChanged为把界面渲染到窗口的时间
boolean measure; View iv1; View iv2; @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(hasFocus && !measure){ measure=true; measure(); } } private void findViews(){ iv1 = findViewById(R.id.iv1); iv2 =findViewById(R.id.iv2); } private void measure(){ String msg1="iv1' width:"+iv1.getWidth()+" height:"+iv1.getHeight(); String msg2="iv2' width:"+iv2.getWidth()+" height:"+iv2.getHeight(); }
0 0
- Activity中获取view的高度和宽度方法
- 获取view的高度和宽度(在onCreate方法中)
- activity启动时获取view的高度和宽度
- 最简便的在Activity中获取View的宽度或高度方法
- Activity中获取view的高度和宽度为0的原因以及解决方案
- Activity中获取view的高度和宽度为0的原因以及解决方案
- Activity中获取view的高度和宽度为0的原因以及解决方案
- Activity中获取view的高度和宽度为0的原因以及解决方案
- Activity中获取view的高度和宽度为0的原因以及解决方案
- Activity中获取view的高度和宽度为0的原因以及解决方案
- 在onCreate()方法中获取View的宽度与高度
- 自定义view中获取字符串的宽度和高度
- 在oncreate中如何获取view的高度和宽度
- onCreate()中获取View的宽度和高度
- 如何在onCreate中获取View的高度和宽度
- 在onCreate方法中获取某个View的宽度和高度
- 在onCreate方法中获取某个View的宽度和高度
- 在onCreate方法中获取某个View的宽度和高度
- numpy.nonzero函数
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- C++标准库map类型
- 九月一号java小练习
- 杭电ACM2054java做法
- Activity中获取view的高度和宽度方法
- TinkPHP 3.2.3版本 新手该注意的地方
- python 接收邮件
- UIday0702:用 UIScrollView 和 UIPageControl 实现引导图
- Centos NAT网络配置
- hdoj 5335 bfs
- CentOS下安装配置LAMP(Linux+Apache+MySQL+PHP)
- UI多线程编程小练习--卖票系统
- 欢迎使用CSDN-markdown编辑器