1. ホーム
  2. android

[解決済み] ?attr/selectableItemBackgroundを背景として使用する場合、波紋の色はどのように変更すればよいですか?

2022-08-07 03:58:22

質問

私はいくつかのSOの質問を見ましたが、彼らは私が欲しいものを達成するためにいくつかの可能な方法を与えてくれました。例えば

  1. 使用方法 colorControlHighlight 属性を使用します。

    以下は私のstyles-v21.xmlです。

    <style name="SelectableItemBackground">
        <item name="android:colorControlHighlight">#5677FC</item>
        <item name="android:background">?attr/selectableItemBackground</item>
    </style>
    
    

    そして私のウィジェット。

    <TextView
        android:id="@+id/tv_take_photo_as_bt"
        android:layout_width="280dp"
        android:layout_height="48dp"
        android:text="@string/act_take_photo"
        style="@style/SelectableItemBackground"/>
    
    

    で、うまくいきません。また、私は parent="Theme.AppCompat を追加したり、スタイルを colorControlHighlight(no android: prefix)" に変更するか、または ?android:attr/selectableItemBackground に変更しても、どちらも有用ではありません。

  2. 使用する backgroundTint 属性を使用します。

    そこで、私は android:backgroundTint="#5677FC" に、私の TextView . それでもだめでした。そこで、私は android:backgroundTintModesrc_in であり src_atop といった具合で、決して違いはありません。

では、リップルの色を変えるにはどうしたらよいかというと ?attr/selectableItemBackground を背景として使用する場合、どのようにすれば波紋の色を変更できるのでしょうか?ロリポップ以降にしか注目していません。よろしくお願いします。

どのように解決するのですか?

最終的に私は解決策を見つける:代わりに使用する android:colorControlHighlight を直接使うのではなく、テーマの中で SelectableItemBackground というように、別のスタイルを書くべきでしょう。

<style name="SelectableItemTheme">
    <item name="colorControlHighlight">@color/ripple_color</item>
</style>

では

<style name="SelectableItemBackground">
    <item name="android:theme">@style/SelectableItemTheme</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

最後に style="@style/SelectableItemBackground"View をlayout.xmlに追加します。

2016/8/26に更新された Nのリリース後、このメソッドでリップルカラーを設定できない場合があることを発見しました。 View (など)。 CardView ). 今、私は開発者に強くお勧めするのは RippleDrawable を使うことをお勧めします。以下はその例です。

をタッチ/クリックしたときに波紋を表示したい。 CardView を表示させたいのですが、もちろんロリポップ以前は別のフィードバックがあるはずです。というわけで書いておきます。

<android.support.v7.widget.CardView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:foreground="@drawable/selectable_item_background"/>

selectable_item_backgrounddrawable フォルダーに格納します。

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

selectable_item_background drawable-v21 フォルダーに格納されます。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ripple_black" />
</selector>

最後に ripple_blackdrawable (または drawable-v21 ) フォルダを使用します。

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="@color/color_clicked"
    tools:ignore="NewApi" /> <!--you can remove this line if it's in v21 folder-->

これで終わりです。他のビューでは、多分 android:background="@drawable/selectable_item_background" . を設定することを忘れないでください。 OnClickListener , OnTouchListener などとすると、リップルが表示されなくなります。