Android基础之获取LinearLayout的宽高


LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。有的时候,我们需要想获取LinearLayout宽高,下面通过这篇文章来跟着小编一起学习学习吧。

前言

看到题目获取LinearLayout宽高,或许大家想到的解决方法如下:

?
1
2
3
4
5
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的宽高,等绘制完成后,关闭定时器即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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方法

?
1
2
3
4
5
@Override
public void onWindowFocusChanged( boolean hasFocus) {
  super .onWindowFocusChanged(hasFocus);
  showPopupWindow();
}

2、用HandlerRunnable,延时

?
1
2
3
4
5
6
7
8
9
10
11
@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开发者们能有所帮助,如果有疑问大家可以留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值