-
在activity生命周期方法:onCreate(),onStart(),onResume()中调用View.getWidth()和View.getHeight()方法获取View的高度是不可行的,因为此时布局没有加载是不可见状态。
还有当view的可见状态为:GONE,时获取的宽高也是0;
2. 解决办法:
(1)直接测量:
1
2
3
4
5
6
7
8
9
10
|
private
void
first() {
int
width = View.MeasureSpec.makeMeasureSpec(
0
,
View.MeasureSpec.UNSPECIFIED);
int
height = View.MeasureSpec.makeMeasureSpec(
0
,
View.MeasureSpec.UNSPECIFIED);
textView.measure(width, height);
int
height1 = textView.getMeasuredHeight();
int
width2 = textView.getMeasuredWidth();
System.out.println(
"first: 宽: "
+ width2 +
" 高: "
+ height1);
}
|
(2)添加绘制view之前的监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
private
void
second() {
ViewTreeObserver vto = textView.getViewTreeObserver();
vto.addOnPreDrawListener(
new
ViewTreeObserver.OnPreDrawListener() {
public
boolean
onPreDraw() {
int
height = textView.getMeasuredHeight();
int
width = textView.getMeasuredWidth();
System.out.println(
"second: 宽:"
+ width +
" 高: "
+ height);
return
true
;
}
});
}
|
(3)添加整体布局监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
private
void
third() {
ViewTreeObserver vto = textView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new
OnGlobalLayoutListener() {
public
void
onGlobalLayout() {
textView.getViewTreeObserver().removeGlobalOnLayoutListener(
this
);
int
height = textView.getMeasuredHeight();
int
width = textView.getMeasuredWidth();
System.out.println(
"third: 宽:"
+ width +
" 高: "
+ height);
}
});
}
|
本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1606535
,如需转载请自行联系原作者