原因:
这是一个很有趣的BUG View.getHeight(),得到的高度居然和我们想的不一样,这个是从XListView的一个BUG说起,刚开始以为是Scroller没有执行,经过一个小时的调试,发现原因是在这里,View.getHeight(),返回的高度和真实的高度不一样。解决方案:
原来的代码
1
2
3
|
public
int
getVisiableHeight() {
return
mContainer.getHeight();
}
|
1
2
3
|
public
int
getVisiableHeight() {
return
mContainer.getLayoutParams().height;
}
|
为什么呢? 让我们看下日志
1
2
3
4
5
6
7
8
|
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getHeight():
157
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getLayoutParams().height:
284
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getHeight():
157
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getLayoutParams().height:
284
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getHeight():
157
02
-
12
18
:
15
:
49.774
: E/Windows(
5761
): mContainer.getLayoutParams().height:
284
02
-
12
18
:
15
:
49.884
: E/Windows(
5761
): mContainer.getHeight():
247
02
-
12
18
:
15
:
49.884
: E/Windows(
5761
): mContainer.getLayoutParams().height:
240
|
可以看出,两个差距很大,为什么呢? 主要是因为这个是因为计算的问题。mContainer.getLayoutParams().height 是自己相对于父控件设置的固定值。而mContainer.getHeight()源码是这样写的
1
2
3
|
public
final
int
getHeight() {
return
mBottom - mTop;
}
|