2013-11-07 4 views
0

У меня есть список, где я определил свои собственные элементы представления списка с помощью настраиваемого макета. Этот макет имеет фон с настраиваемой возможностью.Android: сделать элемент списка с фоном clickable

Мой пользовательский макет для элемента ListView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/item" 
    android:clickable="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" > 
    ... 
</RelativeLayout> 

Мой заказ вытяжке item.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <!-- background: shadow --> 
    <item> 
     <shape 
      android:dither="true" 
      android:shape="rectangle" > 
      <corners android:radius="2dp" /> 

      <solid android:color="@color/itemShadowColor" /> 
     </shape> 
    </item> 

    <!-- foreground: surface --> 
    <item android:bottom="2dp"> 
     <shape 
      android:dither="true" 
      android:shape="rectangle" > 
      <corners android:radius="2dp" /> 

      <solid android:color="@color/itemBackgroundColor" /> 
     </shape> 
    </item> 

</layer-list> 

Теперь этот пункт не кликабельны больше.

Можете ли вы объяснить мне, почему, и что мне нужно сделать, чтобы иметь такое же поведение (селектор с синим фоном), как кнопка?

+0

Я не вижу селектора для нажатых нажатых состояний? – Devrim

+0

Я должен определить их в drawable? Как добавить его и где? – Terry

+0

Я верю, что вы сделаете это в соответствии с ответом;) – Devrim

ответ

2

Определение selector с его pressed и default состояний в res/drawable папке (один из состояния будет вашим @drawable/item). Установите его как bg вашего макета строки списка.

См аналогичный вопрос и ответ: Selector on background color of TextView

Edit: Лучший способ понять и применить что-то вроде Google сделал есть, чтобы посмотреть в SDK и делать подобные вещи, которые. Например, посмотрите на размер btn_default_holo_dark. Это селектор с состояниями и да, это xml.

Это селектор взяты из SDK (sdk\platforms\android-18\data\res\drawable\btn_default_holo_dark.xml)

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal_holo_dark" /> 
    <item android:state_window_focused="false" android:state_enabled="false" 
     android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/btn_default_pressed_holo_dark" /> 
    <item android:state_focused="true" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_focused_holo_dark" /> 
    <item android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal_holo_dark" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/btn_default_disabled_focused_holo_dark" /> 
    <item 
     android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
</selector> 

Эти изображения взяты из SDK (sdk\platforms\android-18\data\res\drawable-xhdpi):
enter image description hereenter image description hereenter image description hereenter image description hereenter image description here

При применении этого рисуем/селектор (@drawable/btn_default_holo_dark) в любой точке зрения, вы будете иметь свои состояния. Надеюсь, что этот образец станет более ясным.

+0

Но какую ссылочную ссылку я связываю так, чтобы нажатые и выбранные состояния выглядели как нажатая кнопка (с синим наложением)? Я ценю фрагменты кода ... – Terry

+0

Я отредактировал свой ответ. Вы можете использовать изображения Google в sdk. Или вы можете создать их с помощью редактора изображений. – Devrim

+0

Я понимаю это сейчас. Тем не менее, мне очень неприятно, что нам нужно скопировать то, что находится в SDK, а не просто использовать его и немного настроить ... В любом случае, спасибо большое! – Terry