2013-10-26 49 views
1

我一直在尋找這個問題的直接答案很長一段時間了。我想知道的是如何在ListView上實現一個自定義高亮,它只會高亮ListView項的子佈局(在這種情況下,我希望突出顯示該項的RelativeLayout)。ListView - 突出顯示項目的子佈局

下面是已經有了打算在我的屏幕截圖:Fail

這裏是list_item.xml代碼:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="72dp" 
android:clickable="false"> 
<RelativeLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp" 
    android:background="@drawable/card_layout"> 
    <LinearLayout android:id="@+id/linearLayout_thumbnail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_vertical"> 
     <ImageView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:id="@+id/imageView_thumbnail"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:orientation="vertical" 
     android:layout_toRightOf="@+id/linearLayout_thumbnail" 
     android:gravity="center_vertical"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView_title" 
      android:paddingLeft="5dp" 
      android:textSize="18dp" 
      android:text="SOME TEXT" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView_subtitle" 
      android:paddingLeft="5dp" 
      android:textSize="12dp" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textView_other" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingRight="12dp" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true"/> 
</RelativeLayout> 
</FrameLayout> 

而且爲ListView該照片的代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#e5e5e5"> 

<ListView android:id="@+id/listView_something" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" 
    android:listSelector="@drawable/list_item_selector" 
    android:drawSelectorOnTop="true"/> 

</LinearLayout> 

爲list_item_selector.xml代碼:

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/list_item_selected" android:state_pressed="true"/> 
    <item android:drawable="@android:color/transparent" android:state_focused="true"/> 
    <item android:drawable="@android:color/transparent"/> 
</selector> 

下面是該card_layout.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle" 
     android:dither="true"> 
     <corners android:radius="2dp"/> 
     <solid android:color="#ccc" /> 
    </shape> 
</item> 

<item android:bottom="2dp"> 
    <shape android:shape="rectangle" 
     android:dither="true"> 
     <corners android:radius="2dp" /> 
     <solid android:color="@android:color/white" /> 
     <padding android:bottom="7dp" 
      android:left="5dp" 
      android:right="5dp" 
      android:top="5dp" /> 
    </shape> 
</item> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/list_item_selected" android:state_pressed="true"/> 
    <item android:drawable="@android:color/transparent" android:state_focused="true"/> 
    <item android:drawable="@android:color/transparent"/> 
</selector> 

這裏的時候我切換的RelativeLayout的背景選擇了ListView的使用,並更改ListView控件,以便它的選擇是什麼情況透明:Sort of working

因此,無論出於何種原因,card_layout.xml文件不允許在選擇器信息之前具有兩項,並且一切都變得很奇怪。任何人都可以告訴我這是如何正確實施? Like Google Play Music(這可能不是最好的例子,因爲它看起來像一個GridView或沿着這些線的東西)

我必須實現一個GridView來顯示這個列表嗎?

回答

1

我找到了一個解決方案,我不知道這是不是最好的解決方案,但它得到了我想要的結果。

簡單地說,我發現在card_layout.xml文件中添加選擇器代碼不起作用。你應該做的是爲你想在按鈕或列表項目上實現的每個狀態創建佈局xml文件,並將該佈局嵌入到選擇器本身中,就像在此SO帖子的答案中一樣:Android Using layer-list for button selector.

因爲我我不想打擾顏色和透明度,我需要實現三種不同狀態的背景,我基本上放置了一個位於整個列表項頂部的RelativeLayout,以充當項目的可選部分。

該代碼,這是在這裏:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="72dp"> 
<RelativeLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp" 
    android:background="@drawable/card_layout"> 
    <LinearLayout android:id="@+id/linearLayout_thumbnail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_vertical"> 
     <ImageView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:id="@+id/imageView_thumbnail"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:orientation="vertical" 
     android:layout_toRightOf="@+id/linearLayout_thumbnail" 
     android:gravity="center_vertical"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView_title" 
      android:paddingLeft="5dp" 
      android:textSize="18dp" 
      android:text="SOME TEXT" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView_subtitle" 
      android:paddingLeft="5dp" 
      android:textSize="12dp" 
      android:text="SOME TEXT" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textView_extra" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingRight="12dp" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true"/> 
</RelativeLayout> 
<RelativeLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:background="@drawable/list_item_selector" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp"/> 
</FrameLayout> 

所以,現在這個工作,截圖在這裏:Proper item selection.