Android基础之获取LinearLayout的宽高
程序员文章站
2024-02-27 18:56:27
前言
看到题目获取linearlayout宽高,或许大家想到的解决方法如下:
public void oncreate(bundle savedinstance...
前言
看到题目获取linearlayout宽高,或许大家想到的解决方法如下:
public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); linearlayout ll = (linearlayout) findviewbyid(r.id.layinfo); log.i("w", ll.getwidth()+"l"+ll.getheight()); }
你会发现打印出来是0
那是因为在oncreate方法的时候linearlayout还并没有绘制完成,所以获取的高度均为0,
或者试着把这段代码放到onresume()
方法中去,依然是0。
实现方法
如果我们用获取linearlayout的宽高
可以通过定时器不断的监听linearlayout的宽高,等绘制完成后,关闭定时器即可。
final handler handler= new handler(){ @override public void handlemessage(message msg) { if(msg.what == 1) { if(ll.getwidth()!=0) { log.i("w", ll.getwidth()+"l"+ll.getheight()); timer.cancel(); } } } }; timer = new timer(); timertask task = new timertask(){ public void run() { message message = new message(); message.what = 1; myhandler.sendmessage(message); } }; timer.schedule(task,10,1000); }
类似,如果想在activity启动后立即弹出popupwindow,我们知道在activity的oncreate()
方法中直接写弹出popupwindow
方法会报错,因为activity没有完全启动是不能弹出popupwindow
。
我们可以尝试用两种方法实现:
1、用onwindowfocuschanged
方法
@override public void onwindowfocuschanged(boolean hasfocus) { super.onwindowfocuschanged(hasfocus); showpopupwindow(); }
2、用handler
和runnable
,延时
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mhandler.postdelayed(mrunnable, 1000); } private runnable mrunnable = new runnable() { public void run() { showpopupwindow(); } };
这样获取linearlayout宽高问题就解决了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对各位android开发者们能有所帮助,如果有疑问大家可以留言交流。