diff options
| author | Yigit Boyar <yboyar@google.com> | 2016-03-30 17:51:53 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-03-30 17:51:55 +0000 |
| commit | 7de3b2d89834028c88e7f6590e5682b02e96e32e (patch) | |
| tree | 96a76cc7a1da27bdbf41a1795b43ad756cdf0bfa /core/java/android | |
| parent | 5b7ca24f14ae4d1189ca7683fdad1ec0e62b88b8 (diff) | |
| parent | 115a6f4d779c451692d75d2c0a638648d36b9867 (diff) | |
Merge "Multiple fixes in ScrollView and HorizontalScrollView" into nyc-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/widget/HorizontalScrollView.java | 49 | ||||
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 38 |
2 files changed, 51 insertions, 36 deletions
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index f16fdd657f84..00f368e3abe3 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -325,16 +325,24 @@ public class HorizontalScrollView extends FrameLayout { if (getChildCount() > 0) { final View child = getChildAt(0); - int width = getMeasuredWidth(); - if (child.getMeasuredWidth() < width) { - final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams(); - - int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, mPaddingTop - + mPaddingBottom, lp.height); - width -= mPaddingLeft; - width -= mPaddingRight; - int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); + final int widthPadding; + final int heightPadding; + final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams(); + final int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion; + if (targetSdkVersion >= Build.VERSION_CODES.M) { + widthPadding = mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin; + heightPadding = mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin; + } else { + widthPadding = mPaddingLeft + mPaddingRight; + heightPadding = mPaddingTop + mPaddingBottom; + } + int desiredWidth = getMeasuredWidth() - widthPadding; + if (child.getMeasuredWidth() < desiredWidth) { + final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec( + desiredWidth, MeasureSpec.EXACTLY); + final int childHeightMeasureSpec = getChildMeasureSpec( + heightMeasureSpec, heightPadding, lp.height); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } } @@ -1235,17 +1243,17 @@ public class HorizontalScrollView extends FrameLayout { } @Override - protected void measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) { + protected void measureChild(View child, int parentWidthMeasureSpec, + int parentHeightMeasureSpec) { ViewGroup.LayoutParams lp = child.getLayoutParams(); - int childWidthMeasureSpec; - int childHeightMeasureSpec; - - childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, mPaddingTop - + mPaddingBottom, lp.height); - - childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + final int horizontalPadding = mPaddingLeft + mPaddingRight; + final int childWidthMeasureSpec = MeasureSpec.makeSafeMeasureSpec( + Math.max(0, MeasureSpec.getSize(parentWidthMeasureSpec) - horizontalPadding), + MeasureSpec.UNSPECIFIED); + final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, + mPaddingTop + mPaddingBottom, lp.height); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } @@ -1257,8 +1265,11 @@ public class HorizontalScrollView extends FrameLayout { final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin + heightUsed, lp.height); - final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec( - lp.leftMargin + lp.rightMargin, MeasureSpec.UNSPECIFIED); + final int usedTotal = mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin + + widthUsed; + final int childWidthMeasureSpec = MeasureSpec.makeSafeMeasureSpec( + Math.max(0, MeasureSpec.getSize(parentWidthMeasureSpec) - usedTotal), + MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 3f7a07bbd31a..0555cd403b00 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -350,24 +350,24 @@ public class ScrollView extends FrameLayout { if (getChildCount() > 0) { final View child = getChildAt(0); - final int height = getMeasuredHeight(); - if (child.getMeasuredHeight() < height) { - final int widthPadding; - final int heightPadding; - final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams(); - final int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion; - if (targetSdkVersion >= VERSION_CODES.M) { - widthPadding = mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin; - heightPadding = mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin; - } else { - widthPadding = mPaddingLeft + mPaddingRight; - heightPadding = mPaddingTop + mPaddingBottom; - } + final int widthPadding; + final int heightPadding; + final int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion; + final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if (targetSdkVersion >= VERSION_CODES.M) { + widthPadding = mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin; + heightPadding = mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin; + } else { + widthPadding = mPaddingLeft + mPaddingRight; + heightPadding = mPaddingTop + mPaddingBottom; + } + final int desiredHeight = getMeasuredHeight() - heightPadding; + if (child.getMeasuredHeight() < desiredHeight) { final int childWidthMeasureSpec = getChildMeasureSpec( widthMeasureSpec, widthPadding, lp.width); final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec( - height - heightPadding, MeasureSpec.EXACTLY); + desiredHeight, MeasureSpec.EXACTLY); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } } @@ -1268,9 +1268,10 @@ public class ScrollView extends FrameLayout { childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, mPaddingLeft + mPaddingRight, lp.width); - + final int verticalPadding = mPaddingTop + mPaddingBottom; childHeightMeasureSpec = MeasureSpec.makeSafeMeasureSpec( - MeasureSpec.getSize(parentHeightMeasureSpec), MeasureSpec.UNSPECIFIED); + Math.max(0, MeasureSpec.getSize(parentHeightMeasureSpec) - verticalPadding), + MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } @@ -1283,8 +1284,11 @@ public class ScrollView extends FrameLayout { final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin + widthUsed, lp.width); + final int usedTotal = mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin + + heightUsed; final int childHeightMeasureSpec = MeasureSpec.makeSafeMeasureSpec( - MeasureSpec.getSize(parentHeightMeasureSpec), MeasureSpec.UNSPECIFIED); + Math.max(0, MeasureSpec.getSize(parentHeightMeasureSpec) - usedTotal), + MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } |
