如何使Android CheckedTextView中的Checkbox保持对齐而不是右对齐?

Kev*_*n W 34 android

我正在尝试将R.layout.simple_list_item_multiple_choice与ListView一起使用.CheckedTextView用于simple_list_item_multiple_choice.xml,但是如何使复选框左对齐而不是右对齐?

Moh*_*bry 43

秘密在于android:checkMark使其为null

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/checked_text_single_choice"
android:layout_width="match_parent"
android:layout_height="52dp"
android:checkMark="@null"
android:gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceSmall" 
android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
android:drawableRight="@null"
android:textColor="@android:color/black"
/>
Run Code Online (Sandbox Code Playgroud)

  • 我不相信这有效.谢谢 (3认同)
  • 这是什么魔术?它甚至不合逻辑,但是有效! (2认同)

Rog*_*ays 34

创建自己的行模板并在CheckedTextView上设置android:drawableLeft.

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:gravity="center_vertical"
android:paddingLeft="5dip"
android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"
/>
Run Code Online (Sandbox Code Playgroud)

要么

android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
Run Code Online (Sandbox Code Playgroud)

  • 这会阻止您将复合可绘制功能与复选标记指示符一起使用(默认情况下CheckedTextView允许).我认为@CommonsWare的答案更合适. (3认同)

Com*_*are 10

我认为你不能.查看源代码,似乎一直在右侧绘制复选标记.并且,说实话,我建议你坚持使用,为了保持一致性 - Android因为其应用程序具有不一致的UI而一直受到打击.

在起飞的机会,有人在你的头用枪指着,迫使你改变对号的位置,子类CheckedTextViewOMGPleaseDontShootCheckedTextView,并覆盖等的方法onDraw(),以改变图像和文本的位置原来的扭捏版本.

  • 现在使用Material设计复选标记应该在左侧,但是允许这样做的代码很遗传是私有的,所以不能轻易地向后移植. (11认同)

Won*_*abo 10

如果您希望复选框位于左侧,只需使用a即可CheckBox.也许这当然没关系,但是CheckBox可以包含文字.您可以通过添加XML属性android:text或通过调用setText()方法来定义该文本.实际上CheckBox是继承自Button,这TextView就是为什么它具有所有与文本相关的属性.


gor*_*nyj 5

您可以将drawable分配给drawableLeft属性,但不会带来任何好处,因为它不支持着色。相反,我像这样扩展了CheckedTextView:

public class LeftSideCheckedTextView extends CheckedTextView {

    public LeftSideCheckedTextView(Context context) {
        this(context, null, 0);
    }

    public LeftSideCheckedTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public LeftSideCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Field mCheckMarkGravity = null;
        try {
            mCheckMarkGravity = this.getClass().getSuperclass().getDeclaredField("mCheckMarkGravity");
            mCheckMarkGravity.setAccessible(true);
            mCheckMarkGravity.set(this, Gravity.START);
        } catch (Exception e) {
            Logger.error(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据此故障单,我在这里访问了CheckedTextView内部使用的隐藏字段mCheckMarkGravity,但无法通过样式属性进行访问:https : //code.google.com/p/android/issues/detail? id=174517