2016-08-26 15 views
18

ビュー(LinearLayoutなど)をクリックしたときに、波紋効果として常にandroid:background="?selectableItemBackground"を使用していました。私はこれがAPI 14と下位互換性があると読んでいると思います。白い背景色のselectableItemBackgroundの使用

しかし、私はこの波紋効果を白い背景で使用する必要があることを発見しました。具体的には、既定の色の背景(私はTheme.AppCompat.Light.NoActionBarから拡張しています)に表示されるリストアイテムのレイアウトを持っていますので、リストアイテムをこの背景から目立たせるように、リストアイテムを無地の白(#FFFFFF) 。ここ

リスト項目レイアウトである:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="?selectableItemBackground" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    ... 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:paddingLeft="@dimen/mdu_keyline_1" 
     android:paddingRight="@dimen/mdu_keyline_1" 
     android:paddingTop="@dimen/mdu_padding_normal" 
     android:paddingBottom="@dimen/mdu_padding_normal"> 

     ... 

    </LinearLayout> 

</FrameLayout> 

上記白色背景なしに波及効果をもたらします。

私がしようとした場合:

<FrameLayout ... 
    android:background="@color/white"> 

これは明らかに白の背景を生成しますが、波及効果なし。

また、私は何か他のものを試してみました - これは私が探しています何に最も近い結果を生成した:

<FrameLayout ... 
    android:background="@color/white"> 

    ... 

    <LinearLayout ... 
     android:background="?selectableItemBackground"> 

は、上記の私の波及効果を持つ白の背景を与えました。 しかし、は、アイテムのどの部分をクリックしてもリップルは常に中央から始まるようです。

現在の結果を示すスクリーンショットです(リストアイテムの上部にあるシャドウは無視してください - これは、私が使っているAppBarLayoutToolbarの影です)。

enter image description here

enter image description here

どのように私は望ましい効果を達成するだろうか?

答えて

35

あなたはあなたのでframeLayoutのフォアグラウンド使用することができます:あなたは、あなたのドローアブルフォルダ内のレイヤーリストを作成することができます

<FrameLayout ... 
    android:background="@android:color/white" 
    android:foreground="?attr/selectableItemBackground"> 
+0

これは完璧です!どうもありがとうございます。 –

+2

Hm。なぜ前に前景について聞いたことがないのだろうかと思います。しかし、動作します!ありがとう! – EGHDK

15

を、そしてあなたの背景にこれを設定します。

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/white"/> 
    <item android:drawable="?attr/selectableItemBackground"/> 
</layer-list> 
+0

私がdrawableフォルダにリップルを使用しているとき、Android 6.0でこれが原因でエラーが発生した場合、チェックアウトしてください:[binary-xml-file-line-error-inflating-class-unknown](http://stackoverflow.com/質問/ 38862718/binary-xml-file-line-error-inflating-class-unknown)を参照してください。 Android 6.0でこのように試しましたか? –

+0

これは、フォアグラウンドではなくバックグラウンドドロウアブルとして使用する場合にも発生しますか?私は現在、私のアプリの一つで上記の正確なレイヤーリストを使用していますが、それはAndroid 6で正常に動作します。サポートライブラリ23.4.0を使用しています。 – Marcel50506

+0

はい私はバックグラウンドとして使用しようとしました。おそらく、これはCardViewの問題です。Didntは通常のViewで使用しようとしました。 –

0

はリップル描画可能ですLayerDrawable。 これを行う正しい方法は次のとおりです。

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 

    <item> 
     <shape> 
      <solid 
       android:color="#FFFFFF"/> 
     </shape> 
    </item> 

    <item android:id="@android:id/mask"> 
     <shape> 
      <solid android:color="@android:color/white"/> 
     </shape> 
    </item> 

</ripple> 
関連する問題