Fix bug #7334966 Padding is still broken in RTL languages
- do correct resolution and reset propagation for all RTL properties (padding and drawables included) - fix CheckedTextView padding too Change-Id: Ie603683a2324b2a6ef2c03633d01d5726c883b90
This commit is contained in:
@@ -3666,15 +3666,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
// Padding from the background drawable is stored at this point in mUserPaddingLeftInitial
|
||||
// and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if
|
||||
// defined.
|
||||
if (startPaddingDefined) {
|
||||
mUserPaddingLeftInitial = startPadding;
|
||||
} else if (leftPaddingDefined) {
|
||||
if (leftPaddingDefined) {
|
||||
mUserPaddingLeftInitial = leftPadding;
|
||||
}
|
||||
if (endPaddingDefined) {
|
||||
mUserPaddingRightInitial = endPadding;
|
||||
}
|
||||
else if (rightPaddingDefined) {
|
||||
if (rightPaddingDefined) {
|
||||
mUserPaddingRightInitial = rightPadding;
|
||||
}
|
||||
}
|
||||
@@ -11559,8 +11554,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
|
||||
/**
|
||||
* Resolve all RTL related properties.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
void resolveRtlPropertiesIfNeeded() {
|
||||
public void resolveRtlPropertiesIfNeeded() {
|
||||
if (!needRtlPropertiesResolution()) return;
|
||||
|
||||
// Order is important here: LayoutDirection MUST be resolved first
|
||||
@@ -11584,8 +11581,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
onRtlPropertiesChanged(getLayoutDirection());
|
||||
}
|
||||
|
||||
// Reset resolution of all RTL related properties.
|
||||
void resetRtlProperties() {
|
||||
/**
|
||||
* Reset resolution of all RTL related properties.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public void resetRtlProperties() {
|
||||
resetResolvedLayoutDirection();
|
||||
resetResolvedTextDirection();
|
||||
resetResolvedTextAlignment();
|
||||
@@ -14195,7 +14196,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public void resolveDrawables() {
|
||||
protected void resolveDrawables() {
|
||||
if (mBackground != null) {
|
||||
mBackground.setLayoutDirection(getLayoutDirection());
|
||||
}
|
||||
@@ -14218,7 +14219,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
public void onResolveDrawables(int layoutDirection) {
|
||||
}
|
||||
|
||||
private void resetResolvedDrawables() {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
protected void resetResolvedDrawables() {
|
||||
mPrivateFlags2 &= ~PFLAG2_DRAWABLE_RESOLVED;
|
||||
}
|
||||
|
||||
@@ -14804,14 +14808,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
if (isRtlCompatibilityMode()) {
|
||||
mPaddingLeft = mUserPaddingLeftInitial;
|
||||
mPaddingRight = mUserPaddingRightInitial;
|
||||
return;
|
||||
}
|
||||
if (isLayoutRtl()) {
|
||||
mPaddingLeft = (mUserPaddingEnd >= 0) ? mUserPaddingEnd : mUserPaddingLeftInitial;
|
||||
mPaddingRight = (mUserPaddingStart >= 0) ? mUserPaddingStart : mUserPaddingRightInitial;
|
||||
} else {
|
||||
if (isLayoutRtl()) {
|
||||
mPaddingLeft = mUserPaddingRightInitial;
|
||||
mPaddingRight = mUserPaddingLeftInitial;
|
||||
} else {
|
||||
mPaddingLeft = mUserPaddingLeftInitial;
|
||||
mPaddingRight = mUserPaddingRightInitial;
|
||||
}
|
||||
mPaddingLeft = (mUserPaddingStart >= 0) ? mUserPaddingStart : mUserPaddingLeftInitial;
|
||||
mPaddingRight = (mUserPaddingEnd >= 0) ? mUserPaddingEnd : mUserPaddingRightInitial;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5259,6 +5259,21 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void resolveRtlPropertiesIfNeeded() {
|
||||
super.resolveRtlPropertiesIfNeeded();
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resolveRtlPropertiesIfNeeded();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@@ -5313,6 +5328,51 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void resolvePadding() {
|
||||
super.resolvePadding();
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resolvePadding();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
protected void resolveDrawables() {
|
||||
super.resolveDrawables();
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resolveDrawables();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void resetRtlProperties() {
|
||||
super.resetRtlProperties();
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resetRtlProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@@ -5361,6 +5421,38 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void resetResolvedPadding() {
|
||||
super.resetResolvedPadding();
|
||||
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resetResolvedPadding();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
protected void resetResolvedDrawables() {
|
||||
super.resetResolvedDrawables();
|
||||
|
||||
int count = getChildCount();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resetResolvedDrawables();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the pressed state should be delayed for children or descendants of this
|
||||
* ViewGroup. Generally, this should be done for containers that can scroll, such as a List.
|
||||
|
||||
@@ -188,10 +188,11 @@ public class CheckedTextView extends TextView implements Checkable {
|
||||
resetPaddingToInitialValues();
|
||||
int newPadding = (mCheckMarkDrawable != null) ?
|
||||
mCheckMarkWidth + mBasePadding : mBasePadding;
|
||||
mNeedRequestlayout |= (mPaddingRight != newPadding);
|
||||
if (isLayoutRtl()) {
|
||||
mNeedRequestlayout |= (mPaddingLeft != newPadding);
|
||||
mPaddingLeft = newPadding;
|
||||
} else {
|
||||
mNeedRequestlayout |= (mPaddingRight != newPadding);
|
||||
mPaddingRight = newPadding;
|
||||
}
|
||||
if (mNeedRequestlayout) {
|
||||
@@ -200,18 +201,6 @@ public class CheckedTextView extends TextView implements Checkable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPadding(int left, int top, int right, int bottom) {
|
||||
super.setPadding(left, top, right, bottom);
|
||||
setBasePadding(isLayoutRtl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaddingRelative(int start, int top, int end, int bottom) {
|
||||
super.setPaddingRelative(start, top, end, bottom);
|
||||
setBasePadding(isLayoutRtl());
|
||||
}
|
||||
|
||||
private void setBasePadding(boolean isLayoutRtl) {
|
||||
if (isLayoutRtl) {
|
||||
mBasePadding = mPaddingLeft;
|
||||
|
||||
@@ -8314,6 +8314,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
protected void resetResolvedDrawables() {
|
||||
mResolvedDrawables = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user