下面小编就为大家分享一篇机器人中获取控件宽高的四种方法集合,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
借鉴自开发艺术
1.onWindowFocusChanged
这个方法会被调用多次,在视角初始化完毕后会调用,当活动的窗口得到焦点和失去焦点都会被调用一次(活动继续执行和暂停执行时)。
@覆盖
public void onWindowFocusChanged(布尔值有焦点){
超级棒。onwindowfocuschanged(hasFocus);
if (hasFocus) {
int width=view。getmeasuredwidth();
int height=view。getmeasuredheight();
}
}
2.view.post
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
视图组root=(视图组)layoutinflater。从(这)开始.inflate(R.layout.activity_main,null,false);
setContentView(root);
最终视图视图=根
view.post(new Runnable() {
@覆盖
公共无效运行(){
int width=view。getmeasuredwidth();
int height=view。getmeasuredheight();
Log.i(标签,宽度' '高度);
}
});
}
具体原理暂时还不懂,不过应该是视角封装的异步回调初始化后,查看的测绘多半也完成了,这是一个同步的过程。所以才可以接收到消息。
3.ViewTreeObserver
他有许多回调。比如当视角树的状态发生改变或者视角树内部的视角可见性发现改变时,onGlobalLayout方法将被回调。
最终视图视图=根
ViewTreeObserver观察者=视图。getviewtreeobserver();
观察者。addongloballayoutlistener(新视图树观察者OnGlobalLayoutListener() {
@覆盖
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width=view。getmeasuredwidth();
int height=view。getmeasuredheight();
Log.i(标签,宽度' '高度);
}
});
通过一种增加全局监听器又移除的方式,获取观察而来的消息。
4.view.measure
手动测绘,分3种情况:
一、match_parent
这个情况是获取不到的。构造这种情况的MeasureSpec需要知道父容器的剩余空间。
二、具体的数值(dp/px)
比如宽高都是100px,可以这样做:
视图视图=根
int widthMeasureSpec=View .测量规格。制作测量规格(100,查看测量规格。完全正确);
int heightMeasureSpec=View .测量规格。制作测量规格(100,查看测量规格。完全正确);
view.measure(widthMeasureSpec,heightsmeasurespec);
Log.i(标签,widthMeasureSpec ' ' heightsmeasurespec);
到这里为止了,这种方法不推荐,因为测出来发现有错误。
以上这篇机器人中获取控件宽高的四种方法集合就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。