Android: настройка фона просмотра с помощью itemSelector со сложными представлениями

У нас есть относительно простой шаблон элемента 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, но это не помогло.


person Pat Long - Munkii Yebee    schedule 02.05.2017    source источник
comment
Если вы не хотите, чтобы весь элемент рисовался в событии клика, то почему вы поместили селектор в родительские свойства вместо того, чтобы помещать пользовательский селектор для каждой части элемента?   -  person tompadre    schedule 03.05.2017
comment
Я ДЕЙСТВИТЕЛЬНО хочу, чтобы весь элемент рисовался при нажатии\выборе. Можете ли вы указать мне пример, где есть селекторы для каждой части элемента?   -  person Pat Long - Munkii Yebee    schedule 03.05.2017
comment
по макетам/селекторам stackoverflow.com/a/30729969/5577679 и слушателям stackoverflow.com/a/22417695/5577679   -  person tompadre    schedule 03.05.2017
comment
Я не знал, что могу применять разные селекторы к дочерним представлениям. Это сработало. Мне также нужно было установить clickable=false в RelativeLayouts, чтобы весь элемент вел себя так, как ожидалось, при нажатии.   -  person Pat Long - Munkii Yebee    schedule 04.05.2017