1

我有一个ListView,我已经实现了卡片UI类型的外观。如果ListView中的某个项目处于“已选择”或“已按下”状态,则该项目周围会出现白色边框。我想整个视图有蓝色,但不知道如何做到这一点:在卡片UI中突出显示整个项目ListView

Single item in the ListView

ListView项布局

<?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="wrap_content" 
     > 

     <RelativeLayout 
      android:id="@+id/itemLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginLeft="0dp" 
      android:layout_marginRight="0dp" 
      android:layout_marginTop="4dp" 
      android:layout_marginBottom="4dp" 
       android:background="@drawable/bg_cards_ui" 
      > 

      <TextView 
       android:id="@+id/title" 
       android:layout_alignParentTop="true" 
       android:paddingBottom="4dip" 
      /> 

      <TextView 
       android:id="@+id/summary" 
       android:paddingBottom="4dip" 
       android:layout_below="@id/text" 
      /> 

      <TextView 
       android:id="@+id/siteName" 
       android:layout_below="@id/summary" 
      /> 

      <TextView 
       android:id="@+id/date" 
       android:layout_below="@id/summary" 
      /> 
     </RelativeLayout> 
    </FrameLayout> 

bg_c​​ard_ui.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="8dp" 
       android:left="8dp" 
       android:right="8dp" 
       android:top="8dp" 
      /> 
     </shape> 
    </item> 
    <item> 
     <selector> 
      <item android:state_pressed="true" android:drawable="@color/my_blue_color" /> 

      <item android:state_selected="true" android:state_pressed="false" android:drawable="@color/my_blue_color" /> 

      <item android:state_activated="true" android:state_selected="false" android:state_pressed="false" android:drawable="@color/my_blue_color" /> 

      <item android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" /> 
     </selector> 
    </item> 
</layer-list> 

回答

1

看看这个:ListView - Highlight sub layout of item.我已经实现d正是我认为你想要做的事情。

基本上,你需要让选择器在每个项目的“drawable”属性中引用一个背景xml文件。您至少需要两个背景xml文件,一个用于正常状态,另一个用于按下,其颜色会发生变化。应该在那之后工作。