Android中获取view的宽高的几种方法
来源:互联网 发布:如何举报淘宝卖家 知乎 编辑:程序博客网 时间:2024/06/16 05:11
很多自定义的view中需要在某个方法中获取一个View的宽高之后再进行相应的操作,但activity中的onCreate、onStart、onResume的方法中是无法正确的获取到某个想要获取View的宽高信息的。这是因为View的measure过程和activity的生命周期方法不是同步执行的,因此无法保证activity执行了onCreate、onStart、onResume时View已经测量完毕,如没测量完毕则获取到的宽高为0。
解决这一问题有四种方案:
1.Activity/View#onWindowFocusChanged:
onWindowFocusChanged这个方法的含义是view已经初始化完毕了,宽高已经准备好了。这时候去获取宽高是伪问题的。onWindowFocusChanged会调用多次,当Activity的窗口得到焦点和失去焦点时均会被调用一次。
public void onWindowFocusChanged(boolean){ super.onWidowFocusChanged(hasFocus); if(hasFoucs){ int width=view.getMeasureWidth(); int height=view.getMeasureHeight();}}
2.view.post(runnable):
通过post可以将一个runnable投递到消息队列的尾部,然后等待Looper调用此runnable的时候,View也已经初始化好了:
protected void onStart(){ super.onStart(); view.post(new Runnable(){ @Override public void run(){ int width=view.getMeasureWidth(); int height=view.getMeasureHeight(); } });}
3.ViewTreeObserver:
使用ViewTreeObserver的众多回调可以完成这个功能,如使用OnGlobaLayoutListener这个接口,当View树的状态发生变化或者View树内部的View的可见性发生改变时,onGlobalLayout方法会被调用,因此这时可以获取到View的宽高的信息。
protect void onStart(){ super.onStart(); ViewTreeObserver observer=view.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ @supperssWarnings("deprecation") @Override public void onGlobalLayout(){ view.getViewTreeObserver().removeGlobalLayoutListener(this); int width=view.getMeasureWidth(); int height=view.getMeasureHeight(); } });}
4.view.measure(int widthMeasureSpec,int heigtMeasureSpec):
通过手动对View进行measure来得到View的宽高;
阅读全文
0 0
- Android--获取View的宽高的几种方法
- android获取view宽高的几种方法 - ysl_longer
- Android中获取view的宽高的几种方法
- android获取view宽高的几种方法,解决获取高宽为0问题
- android 开发中获取View视图的宽和高的几种方法
- android 开发中获取View视图的宽和高的几种方法
- Android 开发中获取View视图的宽和高的几种方法
- Android获取View宽高的几种方式
- Android获取View宽高的几种方式
- Android获取View宽高的几种方式
- Android获取View宽高的几种方式
- onCreate中获取view宽高的几种方式
- Android在onCreate方法中获取view的宽高
- android中获取View宽高的方法
- Android 获取view的宽高方法
- Android 几种获得view的宽和高的方法
- Android中获取View宽高方法
- Android开发中获取屏幕宽高的几种方法
- Android事件分发机制(二)
- 【C/C++开发】C++11 并发指南一(C++11 多线程初探)
- 资源预算和项目约束
- 算法提高 ADV-187 勾股数
- 顺序表应用3:元素位置互换之移位算法
- Android中获取view的宽高的几种方法
- [Gnome] password no longer matches your login keyring
- 40条常见的移动端Web页面问题解决方案
- linux常用命令(ps,) (待完善)
- 反射机制简化Dao层开发
- 2377:Bad Cowtractors(最大生成树)
- HUST1017 Exact cover —— Dancing Links 精确覆盖 模板题
- mysql导入导出sql文件
- 算法提高 ADV-189 连接乘积