欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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、用handlerrunnable,延时

@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开发者们能有所帮助,如果有疑问大家可以留言交流。