2016-08-26 30 views
18

के साथ चयन करने योग्य इटैम बैकग्राउंड का उपयोग करना जब मैं एक दृश्य (LinearLayout उदाहरण के लिए) पर क्लिक करता हूं तो मैं हमेशा android:background="?selectableItemBackground" का उपयोग कर रहा हूं। मुझे लगता है कि मैंने कहीं पढ़ा है कि यह एपीआई 14 के पीछे संगत है।एक सफेद पृष्ठभूमि रंग

हालांकि, मुझे पता चला है कि मुझे इस लहर प्रभाव का उपयोग करने की आवश्यकता है लेकिन एक सफेद पृष्ठभूमि के साथ। विशेष रूप से, मेरे पास एक सूची आइटम के लिए एक लेआउट है जो डिफ़ॉल्ट रंग पृष्ठभूमि (मैं 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"> 

ऊपर मुझे एक लहर प्रभाव के साथ सफेद पृष्ठभूमि दे दी है। हालांकि, मैं जिस आइटम पर क्लिक करता हूं उसके बावजूद लहर हमेशा केंद्र से शुरू होती प्रतीत होती है।

यहां कुछ स्क्रीनशॉट हैं जो वर्तमान परिणाम दिखा रहे हैं (सूची आइटम के शीर्ष पर छाया को अनदेखा करें - यह AppBarLayout और Toolbar से छाया है जिसका उपयोग मैं कर रहा हूं)।

enter image description here

enter image description here

मैं वांछित प्रभाव कैसे प्राप्त कर सकता है?

उत्तर

35

आप अपने FrameLayout के अग्रभाग का उपयोग कर सकते हैं:

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

यह सही है! बहुत बहुत धन्यवाद। –

+2

एचएम। आश्चर्य है कि मैंने पहले कभी अग्रभूमि के बारे में क्यों नहीं सुना है। हालांकि काम करता है! धन्यवाद! – 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

जब मैं ड्रॉइंग फ़ोल्डर में रिपल का उपयोग कर रहा हूं, एंड्रॉइड 6.0 पर यह कारण त्रुटियों का कारण है तो मैंने एक प्रश्न बनाया है चेकआउट: [बाइनरी-एक्सएमएल-फाइल-लाइन-एरर-फुफ्फुस-क्लास-अज्ञात] (http://stackoverflow.com/ प्रश्न/38862718/बाइनरी-एक्सएमएल-फ़ाइल-लाइन त्रुटि बढ़ा-चढ़ाकर-वर्ग-अज्ञात)। क्या आपने एंड्रॉइड 6.0 में इस तरह से कोशिश की? –

+0

क्या यह तब होता है जब आप पृष्ठभूमि को खींचने योग्य (अग्रभूमि के बजाए) के रूप में उपयोग करते हैं? मैं वर्तमान में अपने ऐप्स में से एक में सटीक परत-सूची का उपयोग कर रहा हूं, यह एंड्रॉइड छः पर ठीक चलता है। मैं समर्थन libs 23.4.0 का उपयोग कर रहा हूँ। – Marcel50506

+0

हां मैंने पृष्ठभूमि के रूप में उपयोग करने की कोशिश की। शायद यह एक कार्डव्यू मुद्दा है।सामान्य दृश्य के साथ उपयोग करने की कोशिश नहीं की थी। –

0

लहर drawable एक है 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> 
संबंधित मुद्दे