CheckedTextView это расширение обычного TextView, которое имеет возможность добавить к тексту флажок наряду с текстом. Это может быть полезно при добавлении в ListView, где setChoiceMode установлен на что-либо кроме CHOICE_MODE_NONE. Например, можно создать список из CheckedTextView, в котором можно отмечать, какие пункты в списке сделаны, а какие нет.
Некоторые важные атрибуты при работе с CheckedTextView:
- android:checkMark – устанавливает drawable в качестве флажка.
- android:checked – меняет состояние флажка на активное, если выбран true, и неактивное, если выбран false.
- android:checkMarkTint – устанавливает оттенок флажка.
- android:checkMarkTintMode – устанавливает режим наложения для оттенка.
<CheckedTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:checked="true" android:gravity="center" android:text="Test" android:textSize="18sp" />
Также есть возможность изменять состояние и изображение флажка программно. Сделать это можно с помощью метода setCheckMarkDrawable().
CheckedTextView textView = findViewById(R.id.checked_tv); textView.setCheckMarkDrawable(android.R.drawable.checkbox_off_background);
Изменить состояние флажка можно с помощью метода setChecked().
CheckedTextView textView = findViewById(R.id.checked_tv); textView.setChecked(true); // выставит флажок в активное состояние textView.setChecked(false); // выставит флажок в неактивное состояние
Узнать текущее состояние флажка можно с помощью метода isChecked(), который вернёт true, если флажок активен, и false, если неактивен.
Примечание: вы не сможете изменить состояние флажка, просто щёлкнув по элементу, для этого нужно будет создать слушатель OnClickListener, который будет обрабатывать нажатия.
final CheckedTextView textView = findViewById(R.id.checked_tv); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (textView.isChecked()) { textView.setChecked(false); textView.setCheckMarkDrawable(android.R.drawable.checkbox_off_background); } else { textView.setChecked(true); textView.setCheckMarkDrawable(android.R.drawable.checkbox_on_background); } } });
Примечание: даже если вы меняете флажок программно, вам всё равно нужен будет указать атрибут android:checkMark в разметке.