Xamarin.Forms不可用的ListView(删除select涟漪效应)

我有一个ListView与自定义ViewCell显示文章。 但是,当您select一个项目时,它会显示材料devise波纹/select效果。

连锁反应

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库中find了RepeaterView 。 如果你把它包装在一个ScrollView中,这会起作用,尽pipe它带走了大量整洁的ListView机制,比如刷新。 它也不支持从外部线程对ItemSource的更改。 仍然在寻找其他的解决scheme,因为我知道这是可能的原生Android。

Solutions Collecting From Web of "Xamarin.Forms不可用的ListView(删除select涟漪效应)"

所以经过很长很长一段时间,我们已经知道了,你可以用一个自定义的渲染器来完成它。 这里是如何,

首先,创build一个名为no_selector.xml的文件,并将其放在Resources / layouts文件夹中(打包属性必须设置为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组件创build一个自定义的渲染器,

 [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文件,重build你的项目!

请注意,这消除了应用程序中所有 ListView的涟漪。 如果你只想让它定位一对,你可以改变ExportRenderer属性的第一个types(这确实需要你创build一个扩展ListView的单独的类)。

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

我认为你可以删除它没有自定义渲染器。

您可以将StackPanelBackgroundColor设置为灰色,或者您的列表或页面的背景颜色。

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

或者您可以使用android样式来更改列表视图样式:

AndroidManifest.xml中设置主题

 <application android:label="$safeprojectname$" android:theme="@style/myTheme"></application> 

styles.xml中创build主题

 <?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>