summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/View.java5
-rw-r--r--core/java/android/widget/CheckedTextView.java32
2 files changed, 29 insertions, 8 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 0108ecf17b6d..930eb25412f4 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -9099,7 +9099,10 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED;
}
- private void resolvePadding() {
+ /**
+ * @hide
+ */
+ protected void resolvePadding() {
// If the user specified the absolute 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
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 49616cc1ef18..f3a6da7780bb 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -39,8 +39,9 @@ public class CheckedTextView extends TextView implements Checkable {
private boolean mChecked;
private int mCheckMarkResource;
private Drawable mCheckMarkDrawable;
- private int mBasePaddingRight;
+ private int mBasePadding;
private int mCheckMarkWidth;
+ private boolean mNeedRequestlayout;
private static final int[] CHECKED_STATE_SET = {
R.attr.state_checked
@@ -123,6 +124,7 @@ public class CheckedTextView extends TextView implements Checkable {
mCheckMarkDrawable.setCallback(null);
unscheduleDrawable(mCheckMarkDrawable);
}
+ mNeedRequestlayout = (d != mCheckMarkDrawable);
if (d != null) {
d.setCallback(this);
d.setVisible(getVisibility() == VISIBLE, false);
@@ -130,19 +132,35 @@ public class CheckedTextView extends TextView implements Checkable {
setMinHeight(d.getIntrinsicHeight());
mCheckMarkWidth = d.getIntrinsicWidth();
- mUserPaddingRight = mCheckMarkWidth + mBasePaddingRight;
d.setState(getDrawableState());
} else {
- mUserPaddingRight = mBasePaddingRight;
+ mCheckMarkWidth = 0;
}
mCheckMarkDrawable = d;
- requestLayout();
+ // Do padding resolution. This will call setPadding() and do a requestLayout() if needed.
+ resolvePadding();
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ protected void resolvePadding() {
+ super.resolvePadding();
+ int newPadding = (mCheckMarkDrawable != null) ?
+ mCheckMarkWidth + mBasePadding : mBasePadding;
+ mNeedRequestlayout |= (mPaddingRight != newPadding);
+ mPaddingRight = newPadding;
+ if (mNeedRequestlayout) {
+ requestLayout();
+ mNeedRequestlayout = false;
+ }
}
@Override
public void setPadding(int left, int top, int right, int bottom) {
super.setPadding(left, top, right, bottom);
- mBasePaddingRight = mUserPaddingRight;
+ mBasePadding = mPaddingRight;
}
@Override
@@ -167,9 +185,9 @@ public class CheckedTextView extends TextView implements Checkable {
int right = getWidth();
checkMarkDrawable.setBounds(
- right - mUserPaddingRight,
+ right - mPaddingRight,
y,
- right - mUserPaddingRight + mCheckMarkWidth,
+ right - mPaddingRight + mCheckMarkWidth,
y + height);
checkMarkDrawable.draw(canvas);
}