当前位置: 移动技术网 > 移动技术>移动开发>Android > Android基础之获取LinearLayout的宽高

Android基础之获取LinearLayout的宽高

2019年07月24日  | 移动技术网移动技术  | 我要评论

前言

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网