В Android элементы списка имеют разные состояния в зависимости от разметки. Для того, чтобы выбранный элемент списка был подсвечен, используется
разметка android.R.layout.simple_list_item_activated_1, которая доступна для Android 3 (API 11) и выше. Если вы хотите использовать такое
поведение элемента на Android 2 и ниже, то нужно создать класс, который реализует интерфейс
Checkable.
public class CheckableRelativeLayout extends RelativeLayout implements Checkable {
private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };
private boolean cheched;
public CheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
cheched = false;
}
@Override
public boolean isChecked() {
return cheched;
}
@Override
public void setChecked(boolean checked) {
this.cheched = checked;
refreshDrawableState();
}
@Override
public void toggle() {
cheched = !cheched;
refreshDrawableState();
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
}
В этом примере мы наследуется от RelativeLayout и реализуем Checkable интерфейс. Теперь эту разметку можно использовать при
описание разметки элемента ListView или GridView:
<?xml version="1.0" encoding="utf-8"?>
<com.example.widget.CheckableRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/sliding_menu_item"
android:minHeight="?android:attr/listPreferredItemHeight" >
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.example.widget.CheckableRelativeLayout>
com.example.widget.CheckableRelativeLayout это наш класс с указание пакета, а ?android:attr/listPreferredItemHeight это
минимальная предпочтительная высота элемента списка в Android. Обязательно нужно указать android:background, в котором указано состояние
android:state_selected.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/red" />
<item android:color="@color/white" />
</selector>
Когда элемент списка будет выбран пользователем, он поменяет свой цвет. Такой подход дает совместимости с Android 2 и ниже, и дает возможность подсветить выбранный элемент без использования RadioButton или CheckBox компонентов.
Комментариев нет:
Отправить комментарий