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、用Handler和Runnable,延时
|
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开发者们能有所帮助,如果有疑问大家可以留言交流。
本文介绍了一种在Android中获取LinearLayout控件实际宽高的方法。由于在onCreate方法中控件尚未绘制完成,直接获取宽高将得到0。文章提供了一个使用定时器监听LinearLayout宽高的解决方案。
1万+

被折叠的 条评论
为什么被折叠?



