Подтвердить что ты не робот

Как установить флажок в Android CheckedTextView слева выравниваться, а не выравниваться по правому краю?

Я пытаюсь использовать R.layout.simple_list_item_multiple_choice с ListView. CheckedTextView используется в simple_list_item_multiple_choice.xml, но как я могу установить флажок слева выравниваться, а не выравниваться по правому краю?

4b9b3361

Ответ 1

Создайте свой собственный шаблон строки и установите андроид: drawableLeft в CheckedTextView.

<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"
/>

или

android:drawableLeft="?android:attr/listChoiceIndicatorSingle"

Ответ 2

Секрет в android: checkMark делает его нулевым

<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"
/>

Ответ 3

Я не думаю, что ты можешь. Глядя на исходный код, кажется, что галочка рисуется справа все время. И, честно говоря, я бы рекомендовал вам придерживаться этого, для согласованности - Android все время сбивается с толку, потому что его приложения имеют непоследовательные интерфейсы.

В непредвиденных случаях, когда кто-то указывает на пистолет у вас в голове, заставляя вас менять расположение метки, подкласса CheckedTextView как OMGPleaseDontShootCheckedTextView и переопределять методы типа onDraw(), с измененными версиями оригинала который изменяет размещение изображения и текста.

Ответ 4

Если вы хотите, чтобы флажок находился слева, просто используйте CheckBox. Может быть, это не вопрос конечно, но CheckBox может содержать текст. Вы можете определить этот текст, добавив атрибут XML android: текст или вызов метод setText(), Фактически CheckBox наследуется от Button, который наследует от TextView, поэтому он имеет все свойства, связанные с текстом.

Ответ 5

Пример использования @WonderCsabo для использования CheckBox.

<CheckBox
    android:id="@+id/create_account_checkedTextView_password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Show"
    android:gravity="center"
    android:checked="true"

    # relative layout params
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_above="@+id/hint1" />

checkbox_example

Ответ 6

В этом сообщении может быть трюк с помощью Checkable Layout - https://chris.banes.me/2013/03/22/checkable-views/ , Просто используйте какой-то пользовательский макет, подобный этому, как макет списка ListView:

<com.example.custom_view.CheckableLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckedTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checkMark="?android:attr/listChoiceIndicatorSingle"
    android:duplicateParentState="true"
    .../>
<TextView
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    .../>
</com.example.custom_view.CheckableLinearLayout>

или

android:checkMark=?android:attr/listChoiceIndicatorMultiple"

Ответ 7

Вы можете назначить свой 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);
        }
    }
}

Здесь я обращаюсь к скрытому полю mCheckMarkGravity, который используется внутри CheckedTextView, но не имеет доступа через атрибуты стиля, в соответствии с этим бипом: https://code.google.com/p/android/issues/detail?id=174517

Ответ 8

попробуйте этот вариант и надейтесь, что он даст вам несколько идей.

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

         <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Connection lost sound alert"
                android:layout_weight="10"
                android:layout_gravity="center"
            />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"     
            android:layout_gravity="right"
            android:orientation="horizontal" >

            <CheckBox android:id="@+id/checkbox_meat"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="right"                 
                android:onClick="onCheckboxClicked"/>

        </LinearLayout>


   </LinearLayout>

Ответ 9

android: drawableLeft = "? android: attr/listChoiceIndicatorMultiple": P