DLToolkit.Forms.Controls
DLToolkit.Forms.Controls copied to clipboard
Ability to change scrollbar color
Hi there, would love to see the ability to change the horizontal scrollbar color, this is just a feature request. Thanks
I got the scrollbar color changed on android
in .net standard project
public static readonly BindableProperty ScrollBarColorBindableProperty =
BindableProperty.Create(nameof(ScrollBarColor), typeof(Color), typeof(EnhancedListView), Color.Gray);
public Color ScrollBarColor
{
get
{
return (Color)GetValue(ScrollBarColorBindableProperty);
}
set
{
SetValue(ScrollBarColorBindableProperty, value);
}
}
Using this in the native android project with a renderer that simply extends ListViewRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ListView> e)
{
base.OnElementChanged(e);
if (e.NewElement != null && e.NewElement is EnhancedFlowListView enhancedFlowListView)
{
Java.Lang.Reflect.Field mScrollCacheField = Java.Lang.Class.FromType(typeof(Android.Views.View)).GetDeclaredField("mScrollCache");
mScrollCacheField.Accessible = true;
Java.Lang.Object mScrollCache = mScrollCacheField.Get(Control);
Java.Lang.Reflect.Field scrollBarField = mScrollCache.Class.GetDeclaredField("scrollBar");
scrollBarField.Accessible = true;
Java.Lang.Object scrollBar = scrollBarField.Get(mScrollCache);
Java.Lang.Reflect.Method method = scrollBar.Class.GetDeclaredMethod("setVerticalThumbDrawable", Java.Lang.Class.FromType(typeof(Drawable)));
method.Accessible = true;
Drawable[] layers = new Drawable[1];
ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.Paint.Color = enhancedFlowListView.ScrollBarColor.ToAndroid();
sd1.SetIntrinsicWidth(6);
layers[0] = sd1;
method.Invoke(scrollBar, layers);
}
}