4

このような LinearLayout があります。 ここに画像の説明を入力

各行をクリック可能にしたい。行のLinearLayoutコードは次のようになります。

    <LinearLayout
        style="@style/home_menu_item_container"
        android:id="@+id/home_menu_acronyms_button"
        >
        <ImageView
            style="@style/home_menu_item_left"
            android:background="@color/greyLight"

            />
        <TextView
            style="@style/home_menu_item_right"
            android:text="@string/home_menu_option_2"
            android:background="@color/grey"
            />
    </LinearLayout>

行内の 1 つの子ビューだけでなく、行全体 (親) に広がる波及効果を追加するにはどうすればよいですか? ここで注意が必要なのは、波紋が 2 色の行を超えるようにすることです。

4

6 に答える 6

6

これまでのところ、これを行う最も簡単な方法は、ドローアブルで を定義し<ripple>、 の背景LinearLayoutをこのドローアブル リソースに設定することであることがわかりました。

drawable-v21/item_selector.xml を定義します

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/your_background_color">
    <item android:id="@android:id/mask"
        <!--color here doesn't matter-->
        android:drawable="@android:color/white" /> 
</ripple>

の背景を に設定しLinearLayoutますdrawable/item_selector

<LinearLayout
    style="@style/home_menu_item_container"
    android:background="@drawable/item_selector"
    android:id="@+id/home_menu_acronyms_button" >
     ...
</LinearLayout>

さらに、独自の背景色がない場合は、 a を定義する必要はまったくありませんitem_selector。のように背景を簡単に定義できandroid:background="?android:attr/selectableItemBackground"ますLinearLayout

于 2015-09-29T18:04:53.337 に答える
3

必要なものは少し複雑ですが、別の方法があるとは思いません...
ImageView を に配置して、できるListViewようにする必要がありますが、そうでない場合は設定する必要があります。正しく動作しないImageView is a ListItemset the rippledrawSelectorOnTop="true"

于 2015-02-03T21:45:31.110 に答える
1

もう 1 つのオプションは、波紋の背景色を透明にすることです。このように波紋だけを見ることができます。したがって、( drawable-v21/フォルダー内の)リップルの xml ファイルは次のようになります。

<-- Ripple in some ghastly color, like bright red so you can see it -->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/red"
    >
<!-- background color uses a transparent mask set to full #ffffff (white) -->
<item
    android:id="@android:id/mask"
    android:drawable="@android:color/white"
    />

ロリポップ以前のデバイスをサポートしている場合は、drawable/フォルダーに同じ名前のダミー ファイルが必要であることに注意してください。そのファイルには空のセレクターで十分です。そして、それらの古いデバイスはリップルしないことを覚えておいてください.

于 2016-03-14T19:39:19.467 に答える
-1

上記の答えは私にはうまくいきません。これが私の解決策です:

リップル.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

list_item.xml

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

    <LinearLayout
      >
       ...put het your design
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/ripple" />
</FrameLayout>
于 2016-03-21T12:52:02.903 に答える