7

已經找了,而我還沒有能夠找到一個答案後...Android的漣漪效應而被重寫由選中狀態

我有一個項目回收視圖,其選擇的時候有一個紅色背景和白色文字(事先背景爲白色,文字爲黑色)。爲此,我正在使用選擇器。

我最近試圖給這個添加一個漣漪效果,但是除非我長時間點擊該項目,否則該項目的背景會直接變爲紅色而不會產生波紋。我假設這是因爲選擇器狀態state_selected覆蓋sate_pressed上的紋波?

有誰知道是否有解決方法?這裏是我使用的選擇碼:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@android:color/holo_red_dark" > 

    <item> 
     <selector xmlns:android="http://schemas.android.com/apk/res/android" > 
      <item 
       android:drawable="@drawable/ripple" 
       android:state_pressed="true"/> 
      <item 
       android:drawable="@android:color/holo_red_dark" 
       android:state_selected="true"/> 
      <item android:drawable="@android:color/white"/> 
     </selector> 
    </item> 

</ripple> 

在此先感謝!

回答

16

要創建具有連鎖反應,並顯示所選擇的狀態我做了以下選擇背景:

開始通過定義高亮顏色,有一些透明度:

  • 值/ colors.xml
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="selector_color">#660000ff</color> 
</resources> 

您可能想要兼容性預棒棒糖。把一個典型的老派選擇繪製文件夾中:

  • 繪製/ selector_background.xml
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/selector_color" android:state_pressed="true"/> 
    <item android:drawable="@color/selector_color" android:state_selected="true"/> 
    <item android:drawable="@android:color/transparent"/> 
</selector> 

,然後添加繪製-V21夾裏面下面的圖層繪製:

  • drawable-v21/selector_background.xml
<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <selector> 
      <item android:state_selected="true" 
       android:drawable="@color/selector_color" /> 
      <item android:drawable="@android:color/transparent" /> 
     </selector> 
    </item> 
    <item> 
     <ripple android:color="@color/selector_color"> 
      <item android:id="@android:id/mask"> 
       <color android:color="@android:color/white" /> 
      </item> 
     </ripple> 
    </item> 
</layer-list> 

現在您可以使用@drawable/selector_background作爲您的選擇器。

+2

對於其他人,使用按鈕時,此層列表方法可行,但您需要使用state_activated – urSus

+0

儘管漣漪完美地工作,但列表項不會保持選定狀態。 – Suleiman19

+1

這工作得很好。漣漪效應顏色和選擇的顏色應該不同,以便用戶在選擇已選項目時可以看到漣漪效應。 – hfann

0

這將是更好,如果你換你recyclerview項目視圖中的FrameLayout,並設置機器人:背景= FrameLayout裏的「?selectableItemBackground」和背景的FrameLayout的子佈局=「@繪製/背景」

背景。XML

​​

然後子佈局必須有屬性機器人:duplicateParentState = 「真」

0

所以我在這,我不得不以及使用選擇另一種情況作爲層列表

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true"> 
     <ripple xmlns:android="http://schemas.android.com/apk/res/android" 
       android:color="@color/colorRipple"> 
      <item> 
       <layer-list> 
        <item> 
         <shape android:shape="rectangle"> 
          <solid android:color="@color/grey_very_light" /> 
         </shape> 
        </item> 
        <!-- ripple color --> 
        <item android:bottom="1dp"> 
         <shape android:shape="rectangle"> 
          <solid android:color="@color/c_unread_notifications_item" /> 
         </shape> 
        </item> 

       </layer-list> 
      </item> 
     </ripple> 

    </item> 
    <item> 
     <ripple xmlns:android="http://schemas.android.com/apk/res/android" 
       android:color="@color/colorRipple"> 
      <item> 
       <!-- ripple color --> 
       <layer-list> 

        <item> 
         <shape android:shape="rectangle"> 
          <solid android:color="@color/grey_very_light" /> 
         </shape> 
        </item> 

        <item android:bottom="1dp"> 
         <shape android:shape="rectangle"> 
          <solid android:color="@color/white" /> 
         </shape> 
        </item> 

       </layer-list> 
      </item> 
     </ripple> 
    </item> 
</selector> 

這個工作,爲您的需要,你可以做什麼,只是用你的物品形狀替換波紋下的物品,如果你沒有任何分層。 希望這會有所幫助