CheckedTextView

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 в разметке.