Нарисуйте селектор сверху – для базовой линейной компоновки?

Я хочу, чтобы состояние щелчка переключателя для простого макета рисовало поверх его детей. Я думаю, что это похоже на атрибут drawSelectorOnTop в ListView. Пример макета:

<LinearLayout android:background="@drawable/my_click_selector"> <LinearLayout android:background="#F00" /> </LinearLayout> --------------- | | | ----------- | | ----------- | | | --------------- 

Итак, у нас есть родительский линейный макет и внутренний ребенок, который имеет сплошной цвет фона (красный). Когда я нажимаю на родителя, фоновый цвет актива изменяется, как определено в моем селекторе, но так как ребенок ближе к пользователю в z-порядке, он остается неизменным.

Есть ли способ, чтобы выбранное селекторное состояние было нарисовано поверх всех детей, а не под ним?

благодаря

Solutions Collecting From Web of "Нарисуйте селектор сверху – для базовой линейной компоновки?"

Я сталкиваюсь с этой проблемой, и я смотрел на ваш вопрос раньше, вот что я сделал и отлично работал:

Вы можете использовать FrameLayout android:foreground для выполнения задания для вас

образец кода

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:descendantFocusability="afterDescendants" android:duplicateParentState="true" android:focusable="true" > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:descendantFocusability="beforeDescendants" android:focusable="true" android:focusableInTouchMode="true" android:foreground="@drawable/draw_on_top_selector" > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#282828" android:paddingBottom="5dp" > <ImageView android:layout_width="160dp" android:layout_height="90dp" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_gravity="center_vertical|center_horizontal" android:adjustViewBounds="true" android:contentDescription="@string/app_name" android:scaleType="centerCrop" android:src="@drawable/video_blank" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/episodeImage" android:layout_alignLeft="@id/episodeImage" android:background="@android:color/black" android:gravity="right" android:padding="2dp" android:textColor="#FFFFFF" android:textSize="11sp" /> </RelativeLayout> </FrameLayout> </LinearLayout> 

draw_on_top_selector.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/show_cell_background_selected" android:state_pressed="true"/> <item android:drawable="@drawable/show_cell_background"/> </selector> 

show_cell_background_selected.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <stroke android:width="4dp" android:color="#FFD900" > </stroke> <solid android:color="@android:color/transparent" /> </shape> </item> </layer-list> 

show_cell_background.xml

 <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="#20000000" > </stroke> <solid android:color="@android:color/transparent" /> </shape> </item> </layer-list> 

Недавно я сделал сообщение о создании селектора переднего плана на любом представлении. Это позволит вам избежать вложенных макетов.

Надеюсь, это поможет.

Попробуйте использовать ForegroundLinearLayout https://gist.github.com/chrisbanes/9091754

Вы можете использовать библиотеку ForegroundView