* commit '072533e934e759b95228ba61152e7d958b641b96': Fix bug #7146516 Padding can be "over" resolved
This commit is contained in:
@@ -2814,18 +2814,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
int mUserPaddingEnd;
|
||||
|
||||
/**
|
||||
* Whether a left padding has been defined during layout inflation.
|
||||
* Cache initial left padding.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
boolean mUserPaddingLeftDefined = false;
|
||||
int mUserPaddingLeftInitial = UNDEFINED_PADDING;
|
||||
|
||||
/**
|
||||
* Whether a right padding has been defined during layout inflation.
|
||||
* Cache initial right padding.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
boolean mUserPaddingRightDefined = false;
|
||||
int mUserPaddingRightInitial = UNDEFINED_PADDING;
|
||||
|
||||
/**
|
||||
* Default undefined padding
|
||||
@@ -3247,19 +3247,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
break;
|
||||
case com.android.internal.R.styleable.View_padding:
|
||||
padding = a.getDimensionPixelSize(attr, -1);
|
||||
mUserPaddingLeftDefined = true;
|
||||
mUserPaddingRightDefined = true;
|
||||
mUserPaddingLeftInitial = padding;
|
||||
mUserPaddingRightInitial = padding;
|
||||
break;
|
||||
case com.android.internal.R.styleable.View_paddingLeft:
|
||||
leftPadding = a.getDimensionPixelSize(attr, -1);
|
||||
mUserPaddingLeftDefined = true;
|
||||
mUserPaddingLeftInitial = leftPadding;
|
||||
break;
|
||||
case com.android.internal.R.styleable.View_paddingTop:
|
||||
topPadding = a.getDimensionPixelSize(attr, -1);
|
||||
break;
|
||||
case com.android.internal.R.styleable.View_paddingRight:
|
||||
rightPadding = a.getDimensionPixelSize(attr, -1);
|
||||
mUserPaddingRightDefined = true;
|
||||
mUserPaddingRightInitial = rightPadding;
|
||||
break;
|
||||
case com.android.internal.R.styleable.View_paddingBottom:
|
||||
bottomPadding = a.getDimensionPixelSize(attr, -1);
|
||||
@@ -3561,15 +3561,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
topPadding = padding;
|
||||
rightPadding = padding;
|
||||
bottomPadding = padding;
|
||||
mUserPaddingLeftInitial = padding;
|
||||
mUserPaddingRightInitial = padding;
|
||||
}
|
||||
|
||||
// If the user specified the padding (either with android:padding or
|
||||
// android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
|
||||
// use the default padding or the padding from the background drawable
|
||||
// (stored at this point in mPadding*)
|
||||
internalSetPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
|
||||
mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft;
|
||||
mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight;
|
||||
internalSetPadding(mUserPaddingLeftInitial,
|
||||
topPadding >= 0 ? topPadding : mPaddingTop,
|
||||
rightPadding >= 0 ? rightPadding : mPaddingRight,
|
||||
mUserPaddingRightInitial,
|
||||
bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
|
||||
|
||||
if (viewFlagMasks != 0) {
|
||||
@@ -11540,10 +11544,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
// left / right padding are used if defined. If they are not defined and start / end
|
||||
// padding are defined (e.g. in Frameworks resources), then we use start / end and
|
||||
// resolve them as left / right (layout direction is not taken into account).
|
||||
if (!mUserPaddingLeftDefined && mUserPaddingStart != UNDEFINED_PADDING) {
|
||||
if (mUserPaddingLeftInitial == UNDEFINED_PADDING &&
|
||||
mUserPaddingStart != UNDEFINED_PADDING) {
|
||||
mUserPaddingLeft = mUserPaddingStart;
|
||||
}
|
||||
if (!mUserPaddingRightDefined && mUserPaddingEnd != UNDEFINED_PADDING) {
|
||||
if (mUserPaddingRightInitial == UNDEFINED_PADDING
|
||||
&& mUserPaddingEnd != UNDEFINED_PADDING) {
|
||||
mUserPaddingRight = mUserPaddingEnd;
|
||||
}
|
||||
|
||||
@@ -11557,6 +11563,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
// left / right or right / left depending on the resolved layout direction.
|
||||
// If start / end padding are not defined, use the left / right ones.
|
||||
int resolvedLayoutDirection = getResolvedLayoutDirection();
|
||||
// Set user padding to initial values ...
|
||||
mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ?
|
||||
0 : mUserPaddingLeftInitial;
|
||||
mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ?
|
||||
0 : mUserPaddingRightInitial;
|
||||
// ... then resolve it.
|
||||
switch (resolvedLayoutDirection) {
|
||||
case LAYOUT_DIRECTION_RTL:
|
||||
if (mUserPaddingStart != UNDEFINED_PADDING) {
|
||||
@@ -14322,10 +14334,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED;
|
||||
switch (background.getLayoutDirection()) {
|
||||
case LAYOUT_DIRECTION_RTL:
|
||||
mUserPaddingLeftInitial = padding.right;
|
||||
mUserPaddingRightInitial = padding.left;
|
||||
internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
|
||||
break;
|
||||
case LAYOUT_DIRECTION_LTR:
|
||||
default:
|
||||
mUserPaddingLeftInitial = padding.left;
|
||||
mUserPaddingRightInitial = padding.right;
|
||||
internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
|
||||
}
|
||||
}
|
||||
@@ -14422,6 +14438,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
mUserPaddingStart = UNDEFINED_PADDING;
|
||||
mUserPaddingEnd = UNDEFINED_PADDING;
|
||||
|
||||
mUserPaddingLeftInitial = left;
|
||||
mUserPaddingRightInitial = right;
|
||||
|
||||
internalSetPadding(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@@ -14511,10 +14530,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
|
||||
switch(getResolvedLayoutDirection()) {
|
||||
case LAYOUT_DIRECTION_RTL:
|
||||
mUserPaddingLeftInitial = end;
|
||||
mUserPaddingRightInitial = start;
|
||||
internalSetPadding(end, top, start, bottom);
|
||||
break;
|
||||
case LAYOUT_DIRECTION_LTR:
|
||||
default:
|
||||
mUserPaddingLeftInitial = start;
|
||||
mUserPaddingRightInitial = end;
|
||||
internalSetPadding(start, top, end, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user