Android - как получить интерактивное и проверяемое текстовое представление
Я хочу иметь следующее: текстовое представление, которое.) Изменяет свой фон при щелчке.) Поддерживает этот фон, пока оно не будет нажато снова
все сводится к "проверяемому" состоянию, но я не мог понять, как именно это работает. Вот XML, который я использую для фона:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<item android:drawable="@drawable/menuselected"
android:state_pressed="true" />
<!-- checked -->
<item android:drawable="@drawable/menuselected"
android:state_checked="true" />
<!-- default -->
<item android:drawable="@drawable/transpixel"/>
</selector>
Обновление: это частично работает сейчас. Я принял большую часть кода с http://kmansoft.com/2011/01/11/checkable-image-button/ для своего пользовательского Textview. Я сделал это, как на самом деле, мне нужна функциональность переключателя, а также. Теперь я могу проверить Textview, но не могу снять его. Кто-нибудь видит, почему это может иметь место?
2 ответа
Вы можете использовать CheckedTextView с пустым checkMark и фон по вашему выбору
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkMark="@null"
android:background="@drawable/selectable"/>
ваш выбор может быть
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/selector" />
</selector>
Сделать кастом TextView
реализации android.widget.Checkable
интерфейс. Этого должно быть достаточно, чтобы ваш селектор работал.
Ниже приведен пример реализации:
public class CheckableTextView extends TextView implements Checkable {
private boolean isOn=false;
public CheckableTextView(Context context) {
super(context);
}
public CheckableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CheckableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public int[] onCreateDrawableState(final int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked())
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
return drawableState;
}
@Override
public void setChecked(boolean checked) {
isOn=checked;
refreshDrawableState();
}
@Override
public boolean isChecked() {
return isOn;
}
@Override
public void toggle() {
isOn=!isOn;
refreshDrawableState();
}
}