am 1bef480b: Merge "NumberPicker incorectly enforcing minimal width and height." into ics-mr1
* commit '1bef480b223f03d0fc866f08ca101a07ead89bc2': NumberPicker incorectly enforcing minimal width and height.
This commit is contained in:
@@ -741,9 +741,16 @@ public class NumberPicker extends LinearLayout {
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
final int newWidthMeasureSpec = makeMeasureSpec(widthMeasureSpec, mMinWidth, mMaxWidth);
|
||||
final int newHeightMeasureSpec = makeMeasureSpec(heightMeasureSpec, mMinHeight, mMaxHeight);
|
||||
// Try greedily to fit the max width and height.
|
||||
final int newWidthMeasureSpec = makeMeasureSpec(widthMeasureSpec, mMaxWidth);
|
||||
final int newHeightMeasureSpec = makeMeasureSpec(heightMeasureSpec, mMaxHeight);
|
||||
super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec);
|
||||
// Flag if we are measured with width or height less than the respective min.
|
||||
final int desiredWidth = Math.max(mMinWidth, getMeasuredWidth());
|
||||
final int desiredHeight = Math.max(mMinHeight, getMeasuredHeight());
|
||||
final int widthSize = resolveSizeAndState(desiredWidth, newWidthMeasureSpec, 0);
|
||||
final int heightSize = resolveSizeAndState(desiredHeight, newHeightMeasureSpec, 0);
|
||||
setMeasuredDimension(widthSize, heightSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1357,23 +1364,19 @@ public class NumberPicker extends LinearLayout {
|
||||
* Makes a measure spec that tries greedily to use the max value.
|
||||
*
|
||||
* @param measureSpec The measure spec.
|
||||
* @param maxValue The max value for the size.
|
||||
* @param maxSize The max value for the size.
|
||||
* @return A measure spec greedily imposing the max size.
|
||||
*/
|
||||
private int makeMeasureSpec(int measureSpec, int minValue, int maxValue) {
|
||||
private int makeMeasureSpec(int measureSpec, int maxSize) {
|
||||
final int size = MeasureSpec.getSize(measureSpec);
|
||||
if (size < minValue) {
|
||||
throw new IllegalArgumentException("Available space is less than min size: "
|
||||
+ size + " < " + minValue);
|
||||
}
|
||||
final int mode = MeasureSpec.getMode(measureSpec);
|
||||
switch (mode) {
|
||||
case MeasureSpec.EXACTLY:
|
||||
return measureSpec;
|
||||
case MeasureSpec.AT_MOST:
|
||||
return MeasureSpec.makeMeasureSpec(Math.min(size, maxValue), MeasureSpec.EXACTLY);
|
||||
return MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), MeasureSpec.EXACTLY);
|
||||
case MeasureSpec.UNSPECIFIED:
|
||||
return MeasureSpec.makeMeasureSpec(maxValue, MeasureSpec.EXACTLY);
|
||||
return MeasureSpec.makeMeasureSpec(maxSize, MeasureSpec.EXACTLY);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown measure mode: " + mode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user