summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/CheckedTextView.java28
-rw-r--r--core/res/res/layout/select_dialog_multichoice_material.xml1
-rw-r--r--core/res/res/layout/select_dialog_singlechoice_material.xml1
-rw-r--r--core/res/res/values/attrs.xml11
-rw-r--r--core/res/res/values/symbols.xml3
5 files changed, 35 insertions, 9 deletions
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index ccd0480164f7..29a6a7d4177f 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 8b4c59df8728..01e4cfa89960 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 27a6648b53ec..0f3c277a8a50 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 989cabaed3bf..89bda8217d95 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) -->
<enum name="add" value="16" />
</attr>
+ <!-- Gravity for aligning a CheckedTextView's checkmark to one side or the other. -->
+ <attr name="checkMarkGravity">
+ <!-- Push object to the left of its container, not changing its size. -->
+ <flag name="left" value="0x03" />
+ <!-- Push object to the right of its container, not changing its size. -->
+ <flag name="right" value="0x05" />
+ <!-- Push object to the beginning of its container, not changing its size. -->
+ <flag name="start" value="0x00800003" />
+ <!-- Push object to the end of its container, not changing its size. -->
+ <flag name="end" value="0x00800005" />
+ </attr>
</declare-styleable>
<declare-styleable name="EditText">
</declare-styleable>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 220f5ab87224..94b2f4b9efe3 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1979,4 +1979,7 @@
<java-symbol type="string" name="time_picker_am_label" />
<java-symbol type="string" name="time_picker_pm_label" />
<java-symbol type="dimen" name="text_size_small_material" />
+ <java-symbol type="attr" name="checkMarkGravity" />
+ <java-symbol type="layout" name="select_dialog_singlechoice_material" />
+ <java-symbol type="layout" name="select_dialog_multichoice_material" />
</resources>