Первоначально я хотел галочку, куда текст помещается слева от галочки. После поиска на этом сайте я узнал, что лучшее обходное решение является android:CheckedTextView? Однако я узнал, что галочка не может быть изменена вручную пользователями. Это дизайном?
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/autoupdatecheckboxview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:text="Pop up a message when new data available"
android:typeface="sans" android:textSize="16dip"/>
Вы, вероятно, захотите просто использовать обычный CheckBox
(который наследуется от Button
и, следовательно, TextView
). CheckedTextView
предназначен для работы со списками. Пример XML макета CheckBox
приведен ниже:
<CheckBox
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pop up a message when new data available"
android:textSize="16dip" />
Возможно и довольно просто реализовать то, что вы ищете. Да, используется CheckedTextView
в первую очередь для того, чтобы иметь сингл Проверяемое представление
в строке ListView
, которое контролирует проверяемые состояния своих дочерних элементов с помощью choiceMode
.Однако, поскольку CheckBox, похоже, не поддерживает флажок с выравниванием по правому краю, а CheckedTextView является флажком с выравниванием по правому краю, имеет смысл захотеть использовать то, что там есть.
Поскольку ListView управляет отмеченным состоянием элемента списка, сам CheckedTextView не реагирует на события щелчка и по умолчанию не доступен для щелчка или фокусировки. Однако он реагирует на нажатие и сфокусированные состояния - это означает, что он может получать события фокусировки и щелчка и выглядит правильно, насколько должен выглядеть флажок. Единственное, чего не хватает, это то, что он не переключает свое отмеченное состояние при нажатии. Поэтому быстрый OnClickListener, который вызывает .toggle ()
, даст вам конечный результат, который вы ищете.
Таким образом, вам нужны 3 вещи: интерактивность, фокусировка и onClickListener:
CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
chkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
((CheckedTextView) v).toggle();
}
});
и файл макета:
<CheckedTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/CheckedTextView01"
android:checked="true"
android:clickable="true"
android:focusable="true"
android:text="Label on Left Side of Checkbox."
/>