В 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 компонентов.
Комментариев нет:
Отправить комментарий