Сделать линейный макет выбираемым как элемент списка в представлении списка (Android) - PullRequest
23 голосов
/ 28 апреля 2011

Я знаю, как добавить слушателя onClick в LinearLayout, чтобы сделать весь макет целевым объектом клика, но я бы хотел, чтобы LinearLayout выделялся при нажатии точно так же, как элемент списка в виде списка.Какой лучший способ сделать это?

Ответы [ 3 ]

27 голосов
/ 05 сентября 2014

Я предпочитаю более простой способ:

<LinearLayout android:orientation="vertical"
              android:id="@+id/layoutIdentifier"
              android:clickable="true"
              android:background="?android:attr/selectableItemBackground"

              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <!-- put views here -->
</LinearLayout>

Вы не можете изменить фон, нажатый на состояние, таким образом, но иногда вам это не нужно.

14 голосов
/ 28 апреля 2011

Я столкнулся с этим, и это то, что я придумал.В макете установите фон для рисованного ресурса:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/clickable_layout"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:background="@drawable/clickable"> 
...
</LinearLayout>

Затем в drawable добавьте clickable.xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
    android:drawable="@android:drawable/list_selector_background" />      
</selector>

Тогда вам решать, действительно ли выхочу добавить обработчик кликов в вашу деятельность.

0 голосов
/ 06 июня 2012

Вы можете установить все элементы внутри макета clickable = false. Затем вы должны имитировать поведение выделения, устанавливая цвет фона макета и устанавливая все остальные с прозрачным фоном при нажатии на макет. Вы можете использовать идентификатор макета в качестве индекса, чтобы узнать, какой макет выбран.

...