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()这是什么原因
展开
1个回答
展开全部
你这问题有点蹊跷,理论上来说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.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或者尺寸值,就会得到不一样的值了,你可以用断点调试去看一下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询