android中scroll.getChildAt(0).getMeasuredHeight()和scroll.getMeasuredHeight()有什么区别

scroll.getChildAt(0).getMeasuredHeight()获取的是scroll.getHeight()+scroll.getScrollY()的值,... scroll.getChildAt(0).getMeasuredHeight()获取的是scroll.getHeight()+scroll.getScrollY()的值,而scroll.getMeasuredHeight()获取的值等于scroll.getHeight()这是什么原因 展开
 我来答
ZLL948725158
2016-06-09
知道答主
回答量:14
采纳率:0%
帮助的人:8.5万
展开全部
你这问题有点蹊跷,理论上来说scroll.getChildAt(0).getMeasuredHeight()获取的应该是scrollview子节点的真正高度,而scroll.getMeasuredHeight()获取到的应该是屏幕中显示的view的高度。
在你的问题中scroll.getChildAt(0).getMeasuredHeight()为scroll.getHeight()+scroll.getScrollY()就是屏幕显示的高度加上滚动的距离,这个是有问题的,而后面的scroll.getMeasuredHeight()等于scroll.getHeight()这个也有问题。
所以可能是你没用使用measure方法吧,如果没使用这个方法,用measurexx类似的方法获取到的值都是不准确的,下面是一个measure方法,你先用这个方法,之后再获取上面的高度试试看。
private void measureView(View child) {
ViewGroup.LayoutParams params = child.getLayoutParams();
if (params == null) {
params = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0,
params.width);
int lpHeight = params.height;
int childHeightSpec;
if (lpHeight > 0) {
childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight,
MeasureSpec.EXACTLY);
} else {
childHeightSpec = MeasureSpec.makeMeasureSpec(0,
MeasureSpec.UNSPECIFIED);
}
child.measure(childWidthSpec, childHeightSpec);
}
追问
刚才试了一下,调用这个方法后scroll.getChildAt(0).getMeasuredHeight()和scroll.getMeasuredHeight()的值都等于scroll.getHeight()+scroll.getScrollY()了,请问这个方法实现的什么功能呢?
追答
这个方法是预测量view的真实尺寸的方法,相当于是一个测量工具,用在很多自定义组件上面,没有调用此方法,获取到的measurexxx方法的值一般都是0,由于scrollview只允许有一个子节点,所以一般情况下,scroll.getChildAt(0).getMeasuredHeight()就等于scroll.getHeight()+scroll.getScrollY()了,除非在你指定了scrollview的高度同时你又指定了他子节点的margin或者尺寸值,就会得到不一样的值了,你可以用断点调试去看一下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式