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