私はかなり長い間、この質問に対する直接的な答えを探してきました。私が知りたいのは、ListView アイテムのサブ レイアウトのみを強調表示する (できれば上に) カスタム ハイライトを ListView に実装する方法です (この場合、アイテムの RelativeLayout を強調表示しようとしています)。
ここに私が行っていることのスクリーンショットがあります:
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 を変更してセレクターが透明になるようにすると、次のようになります。
そのため、何らかの理由で card_layout.xml ファイルにセレクター情報の前に 2 つの項目を含めることは許可されておらず、すべてがおかしくなりました。これがどのように適切に実装されているか誰か教えてもらえますか? Google Play Music のように (これは GridView などに似ているため、最良の例ではない可能性があります)
このリストを表示するには、GridView を実装する必要がありますか?