fix h&v scrollview on measure
This commit is contained in:
parent
6664d8d988
commit
6f635a6786
@ -79,7 +79,7 @@ public class HVScrollView extends FrameLayout {
|
|||||||
* When set to true, the scroll view measure its child to make it fill the currently
|
* When set to true, the scroll view measure its child to make it fill the currently
|
||||||
* visible area.
|
* visible area.
|
||||||
*/
|
*/
|
||||||
private boolean mFillViewport;
|
private boolean mFillViewport = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether arrow scrolling is animated.
|
* Whether arrow scrolling is animated.
|
||||||
@ -311,17 +311,31 @@ public class HVScrollView extends FrameLayout {
|
|||||||
final View child = getChildAt(0);
|
final View child = getChildAt(0);
|
||||||
int height = getMeasuredHeight();
|
int height = getMeasuredHeight();
|
||||||
int width = getMeasuredWidth();
|
int width = getMeasuredWidth();
|
||||||
if (child.getMeasuredHeight() < height || child.getMeasuredWidth() < width) {
|
|
||||||
width -= getPaddingLeft();
|
width -= getPaddingLeft();
|
||||||
width -= getPaddingRight();
|
width -= getPaddingRight();
|
||||||
int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
|
|
||||||
|
|
||||||
height -= getPaddingTop();
|
height -= getPaddingTop();
|
||||||
height -= getPaddingBottom();
|
height -= getPaddingBottom();
|
||||||
int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
|
int childWidthMeasureSpec;
|
||||||
|
int childHeightMeasureSpec;
|
||||||
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
|
final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||||
|
if (lp.width != ViewGroup.LayoutParams.MATCH_PARENT && lp.height != ViewGroup.LayoutParams.MATCH_PARENT) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if (child.getMeasuredWidth() < width && lp.width == ViewGroup.LayoutParams.MATCH_PARENT) {
|
||||||
|
childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
|
||||||
|
} else {
|
||||||
|
widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
|
||||||
|
childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec,
|
||||||
|
getPaddingLeft() + getPaddingRight(), lp.width);
|
||||||
|
}
|
||||||
|
if (child.getMeasuredHeight() < height && lp.height == ViewGroup.LayoutParams.MATCH_PARENT) {
|
||||||
|
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
|
||||||
|
} else {
|
||||||
|
heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
|
||||||
|
childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec,
|
||||||
|
getPaddingTop() + getPaddingBottom(), lp.height);
|
||||||
|
}
|
||||||
|
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user