У нас есть относительно простой шаблон элемента Android в ListView.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@android:drawable/list_selector_background">
<!--Encounter Type and Start-->
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/mid_grey"
android:paddingTop="12dp"
android:paddingRight="24dp"
android:paddingBottom="12dp"
android:paddingLeft="24dp">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textStyle="bold"
android:textSize="@dimen/text_size_large"
android:text="Main Item Heading"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10:45"
android:layout_toLeftOf="@+id/startTimeRelative"
android:textColor="@color/grey1"
android:textSize="@dimen/text_size_large" />
<TextView
android:id="@+id/startTimeRelative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12sp"
android:layout_alignParentRight="true"
android:text="Today"
android:textColor="@color/grey1"
android:textSize="@dimen/text_size_large" />
</RelativeLayout>
<!--Patient Name and Avatar-->
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingRight="24dp"
android:paddingBottom="8dp"
android:paddingLeft="24dp">
<ImageView
android:id="@+id/patientAvatar"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:scaleType="fitXY"
android:src="@drawable/patient_avatar" />
<LinearLayout
android:layout_toRightOf="@+id/patientAvatar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/patientname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Subsection Heading"
android:textColor="#000000"
android:textSize="@dimen/text_size_large"
android:textStyle="bold"
android:ellipsize="end"
android:maxLines="1" />
</LinearLayout>
</RelativeLayout>
<!--</LinearLayout>-->
</LinearLayout>
Это отображает этот макет
Я хочу установить фон элементов при нажатии или выборе. Я пытаюсь сделать это, установив фон элемента в пользовательский селектор элементов.
android:background="@android:drawable/list_selector_background"
Это селектор xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/debug_blue" />
<item android:state_checked="true" android:drawable="@color/debug_green" />
<item android:state_pressed="true" android:drawable="@color/debug_blue" />
</selector>
Проблема в том, что, поскольку я устанавливаю цвет фона представлений внутри элемента, селектор не отображается должным образом. Я удалил один из внутренних цветов (используемый в «Заголовке подраздела» на снимке экрана) и установил его как цвет списка. Это означает, что синий цвет просвечивает, когда элемент нажимается в нижней части шаблона, как показано на этом снимке экрана.
Все примеры для Android, показывающие, что селекторы элементов работают с простыми макетами элементов, для которых задан один или не задан цвет фона.
Как я могу установить фон всего элемента, сохраняя при этом один или несколько цветов фона в дочернем представлении, если они не выбраны?
Я просмотрел настройку drawSelectorOnTop
в ListView, но это не помогло.