diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index ccd0480164f76..29a6a7d4177f9 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -53,6 +53,8 @@ public class CheckedTextView extends TextView implements Checkable { private int mBasePadding; private int mCheckMarkWidth; + private int mCheckMarkGravity = Gravity.END; + private boolean mNeedRequestlayout; private static final int[] CHECKED_STATE_SET = { @@ -83,15 +85,17 @@ public class CheckedTextView extends TextView implements Checkable { } mCheckMarkTintMode = Drawable.parseTintMode(a.getInt( - R.styleable.CompoundButton_buttonTintMode, -1), mCheckMarkTintMode); + R.styleable.CheckedTextView_checkMarkTintMode, -1), mCheckMarkTintMode); - if (a.hasValue(R.styleable.CompoundButton_buttonTint)) { - mCheckMarkTintList = a.getColorStateList(R.styleable.CompoundButton_buttonTint); + if (a.hasValue(R.styleable.CheckedTextView_checkMarkTint)) { + mCheckMarkTintList = a.getColorStateList(R.styleable.CheckedTextView_checkMarkTint); mHasCheckMarkTint = true; applyCheckMarkTint(); } + mCheckMarkGravity = a.getInt(R.styleable.CheckedTextView_checkMarkGravity, Gravity.END); + boolean checked = a.getBoolean(R.styleable.CheckedTextView_checked, false); setChecked(checked); @@ -293,7 +297,7 @@ public class CheckedTextView extends TextView implements Checkable { @Override protected void internalSetPadding(int left, int top, int right, int bottom) { super.internalSetPadding(left, top, right, bottom); - setBasePadding(isLayoutRtl()); + setBasePadding(isCheckMarkAtStart()); } @Override @@ -306,7 +310,7 @@ public class CheckedTextView extends TextView implements Checkable { resetPaddingToInitialValues(); int newPadding = (mCheckMarkDrawable != null) ? mCheckMarkWidth + mBasePadding : mBasePadding; - if (isLayoutRtl()) { + if (isCheckMarkAtStart()) { mNeedRequestlayout |= (mPaddingLeft != newPadding); mPaddingLeft = newPadding; } else { @@ -319,14 +323,20 @@ public class CheckedTextView extends TextView implements Checkable { } } - private void setBasePadding(boolean isLayoutRtl) { - if (isLayoutRtl) { + private void setBasePadding(boolean checkmarkAtStart) { + if (checkmarkAtStart) { mBasePadding = mPaddingLeft; } else { mBasePadding = mPaddingRight; } } + private boolean isCheckMarkAtStart() { + final int gravity = Gravity.getAbsoluteGravity(mCheckMarkGravity, getLayoutDirection()); + final int hgrav = gravity & Gravity.HORIZONTAL_GRAVITY_MASK; + return hgrav == Gravity.LEFT; + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -347,13 +357,13 @@ public class CheckedTextView extends TextView implements Checkable { break; } - final boolean isLayoutRtl = isLayoutRtl(); + final boolean checkMarkAtStart = isCheckMarkAtStart(); final int width = getWidth(); final int top = y; final int bottom = top + height; final int left; final int right; - if (isLayoutRtl) { + if (checkMarkAtStart) { left = mBasePadding; right = left + mCheckMarkWidth; } else { diff --git a/core/res/res/layout/select_dialog_multichoice_material.xml b/core/res/res/layout/select_dialog_multichoice_material.xml index 8b4c59df87288..01e4cfa89960e 100644 --- a/core/res/res/layout/select_dialog_multichoice_material.xml +++ b/core/res/res/layout/select_dialog_multichoice_material.xml @@ -26,4 +26,5 @@ android:paddingStart="16dip" android:paddingEnd="16dip" android:checkMark="?android:attr/listChoiceIndicatorMultiple" + android:checkMarkGravity="start" android:ellipsize="marquee" /> diff --git a/core/res/res/layout/select_dialog_singlechoice_material.xml b/core/res/res/layout/select_dialog_singlechoice_material.xml index 27a6648b53ec5..0f3c277a8a508 100644 --- a/core/res/res/layout/select_dialog_singlechoice_material.xml +++ b/core/res/res/layout/select_dialog_singlechoice_material.xml @@ -26,4 +26,5 @@ android:paddingStart="16dip" android:paddingEnd="16dip" android:checkMark="?android:attr/listChoiceIndicatorSingle" + android:checkMarkGravity="start" android:ellipsize="marquee" /> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 989cabaed3bfc..89bda8217d958 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3163,6 +3163,17 @@ result to valid color values. Saturate(S + D) --> + + + + + + + + + + + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 45ba51e23818c..a4bec17d31122 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1981,4 +1981,7 @@ + + +