Я пытаюсь использовать R.layout.simple_list_item_multiple_choice с ListView. CheckedTextView используется в simple_list_item_multiple_choice.xml, но как я могу установить флажок слева выравниваться, а не выравниваться по правому краю?
Как установить флажок в Android CheckedTextView слева выравниваться, а не выравниваться по правому краю?
Ответ 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" />
Ответ 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