获取控件宽高
来源:互联网 发布:电视剧全集获取源码 编辑:程序博客网 时间:2024/05/18 22:11
在onCreate中如何获得View宽高
经常我们需要在布局中动态的去改变某些View的宽高,并且是和其他View的宽高有联系的,所以我们要先获取另外一个view的宽高,来判断设置当前view的宽高,但是在onCreate() onResume()获取View的width方法中都没有办法获取到View的实际宽高(这种情况使用动态布局使用wrap_content或match_parent就会出现).所以,我们必须用一种变通的方法,等View绘制完成后去获取width和Height
- 监听Draw/Layout时间:ViewTreeObserver
首先先介绍一下这个ViewTreeObserver
- 这个观察者是用来监听视图树的监听视图树发生全局变化时发出的通知
- 布局变化,开始绘制,触摸模式改变等
- 不能被实例化,通过View.getViewTreeObserver()获取
简单来说:这是个View事件的观察者.要注意的是他的初始化就是调用View.getViewtreeObserve()
使用
- 在onCreat()中获取控件高度和宽度(但是需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener注销掉。)
ViewTreeObserver observer = view.getViewTreeObserver(); observer .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { view.getViewTreeObserver().removeGlobalOnLayoutListener(this); final int w = view.getMeasuredWidth(); final int h = view.getMeasuredHeight(); } });
- 启动帧动画
OnPreDrawListener opdl=new OnPreDrawListener(){ @Override public boolean onPreDraw() { animDraw.start(); return true; } }; //onCreate方法中 imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
2、将一个runnable添加到Layout队列中:View.post()
这个是最常见的在onCreate获取view款宽高的方法调用view.post()一个runnable就可以了,runnable对象中的方法会在view的measure,layout等事件触发(UI事件队列会按顺序处理时间,在setContentView()被调用后,事件队列中会包含一个重新layout的message,所有post到队列中的东西都会在layout发生变化后执行)
view.post(new Runnable() { @Override public void run() { view.getHeight(); //height is ready } });
这个方法比ViewTreeObserver好:
1、你的代码只会执行一次,而且你不用在在每次执行后将Observer禁用,省心多了。
2、语法很简单
阅读全文
0 0
- 获取控件宽高
- 获取控件宽高
- 获取控件高宽
- 获取控件宽高
- 获取控件的宽高
- android获取控件宽高
- android获取控件宽高
- 获取屏幕/控件宽高
- 控件的宽高获取
- 获取控件的宽高
- 获取控件的宽高
- 获取控件的宽高
- 获取控件的宽高
- 屏幕获取、控件获取、设置宽高
- android获取屏幕宽高与获取控件宽高
- android获取屏幕宽高与获取控件宽高
- android获取屏幕宽高与获取控件宽高
- android获取屏幕宽高与获取控件宽高
- 基于 JAVA NIO 的socket通信
- Mac 常用命令行
- SpannableString两种匹配方法分析(第一种为模仿微博内容匹配)
- sed正则表达式
- VirtualBox Centos安装增强工具并实现文件夹共享
- 获取控件宽高
- 求最小环 floyed 与 dijkstra
- 【工具】福昕阅读器快捷键
- 网站建设解决响应式网站图片响应式难题
- c#运算符和控制流
- 打开excel提示:向程序发送命令时出现问题,如何解决
- 网页中表单按回车就自动提交的问题总结
- 消费升级:谁赢得供应链,谁就赢得市场
- Linux磁盘管理