2016-02-23 11 views
23

मेरे पास कस्टम व्यूसेल के साथ एक सूची दृश्य है जो लेख प्रदर्शित करता है। हालांकि जब आप कोई आइटम चुनते हैं, तो यह सामग्री डिज़ाइन लहर/चयन प्रभाव दिखाता है।Xamarin.Forms अनुपयोगी सूची दृश्य (चयन लहर प्रभाव को हटाएं)

Ripple effect

Xaml:

<ListView HasUnevenRows="True" ItemsSource="{Binding NewsArticles}" IsPullToRefreshEnabled="True"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
      <ViewCell> 
       <StackLayout Padding="10"> 
       <Label Text="{Binding Title}" HorizontalOptions="Center" FontAttributes="Bold" /> 
       <Image Source="{Binding ImageUrl}" IsVisible="{Binding HasImage}" /> 
       <Label Text="{Binding Content}"></Label> 
       </StackLayout> 
      </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     </ListView> 

मैं कैसे असर निकालते हैं?

अद्यतन:

कुछ शोध करने के बाद मैं XLabs पुस्तकालय में RepeaterView पाया। यह काम करता है अगर आप इसे स्क्रॉलव्यू में लपेटते हैं, हालांकि यह रीफ्रेशिंग जैसे सुस्त लिस्ट व्यू मैकेनिक्स को बहुत दूर ले जाता है। यह बाहरी थ्रेड से आइटमसोर्स में परिवर्तनों का भी समर्थन नहीं करता है। अभी भी अन्य समाधानों की तलाश है क्योंकि मुझे पता है कि यह मूल एंड्रॉइड में संभव है।

उत्तर

15

तो लंबे समय बाद, हमने इसे समझ लिया, आप इसे एक कस्टम रेंडरर के साथ पूरा कर सकते हैं। यहां बताया गया है कि,

सबसे पहले, no_selector.xml नामक फ़ाइल बनाएं और उसे संसाधन/लेआउट फ़ोल्डर में रखें (पैकेजिंग गुण AndroidResource पर सेट होना चाहिए)।

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:drawable="@android:color/transparent"/> 
</selector> 

उसके बाद, ListView घटक के लिए एक कस्टम रेंडरर बनाने

[assembly: ExportRenderer (typeof(ListView), typeof(NoRippleListViewRenderer))] 
namespace Your.Own.Namespace 
{ 
    public class NoRippleListViewRenderer : ListViewRenderer 
    { 
     protected override void OnElementChanged (ElementChangedEventArgs<ListView> e) 
     { 
      base.OnElementChanged (e); 
      Control.SetSelector (Resource.Layout.no_selector); 
     } 
    } 
} 

no_selector फ़ाइल नहीं पाया जा सकता है, तो अपनी परियोजना के पुनर्निर्माण!

इस तथ्य से अवगत रहें कि सभी आपके अनुप्रयोग में ListViews के लिए लहर को हटा देता है। यदि आप केवल एक जोड़े को लक्षित करना चाहते हैं तो आप ExportRenderer विशेषता पर पहला प्रकार बदल सकते हैं (इसके लिए आपको एक अलग वर्ग बनाने की आवश्यकता होती है जो ListView को बढ़ाती है)।

https://gist.github.com/awatertrevi/d83787dbbf3de6ef0e0a344169d3c2fa

+0

हमने इसे ठीक तरह से करने की कोशिश की, लेकिन NotFoundException प्राप्त करना। हमने समाधान को कई बार पुनर्निर्माण और साफ कर दिया।BuildAction AndroidResources पर सेट है और हम जेनरेट एपीके में एक्सएमएल-फाइल देख सकते हैं – Chris

1

मुझे लगता है कि आप एक कस्टम रेंडरर के बिना इसे हटा सकते हैं।

आप अपने StackPanel में BackgroundColor ग्रे या जो भी आपकी सूची या पृष्ठ का पृष्ठभूमि रंग सेट कर सकते हैं।

<ListView HasUnevenRows="True" ItemsSource="{Binding NewsArticles}" IsPullToRefreshEnabled="True"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <StackLayout Padding="10" BackgroundColor="Gray"> 
        <!-- ... --> 
       </StackLayout> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

या आप सूची दृश्य शैलियों को बदलने के लिए एंड्रॉयड शैलियों का उपयोग कर सकते हैं:

में सेट विषय AndroidManifest.xml

<application android:label="$safeprojectname$" android:theme="@style/myTheme"></application> 
styles.xml में विषय

बनाएं

<?xml version="1.0" encoding="utf-8" ?> 
<resources> 
    <style name="myTheme" parent="@android:style/Theme.Material.Light"> 
     <item name="android:listViewStyle">@style/ListViewStyle.Light</item> 
    </style> 

    <style name="ListViewStyle.Light" parent="@android:style/Widget.ListView"> 
     <item name="android:listSelector">@android:color/transparent</item> 
    </style> 
</resources> 
संबंधित मुद्दे