Xamarin.Forms Borderly Picker
Hello, When i develop an application with Xamarin.Forms, I need to put a picker and picker has different design in the Android and iOS. I want to show picker like in the iOS. For that i need to write Custom Renderer for the Android and iOS.
Firstly, in the portable i create a class which name is CustomMyPicker and i inherit from Picker.
public class CustomMyPicker : Picker { }
After that, i create class in the Android. The class name is CustomPickerRenderer. Here is the codes that i wrote;
public class CustomPickerRenderer : PickerRenderer { CustomMyPicker element; protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) { base.OnElementChanged(e); element = (CustomMyPicker)this.Element; if (Control != null) { Control.Background = AddBorderToPicker(); } } public LayerDrawable AddBorderToPicker() { ShapeDrawable pickerBorder = new ShapeDrawable(); pickerBorder.Paint.Color = Android.Graphics.Color.Gray; pickerBorder.SetPadding(10, 10, 10, 10); pickerBorder.Paint.SetStyle(Paint.Style.Stroke); pickerBorder.Paint.StrokeWidth = 5; Drawable[] layers = { pickerBorder }; LayerDrawable layerDrawable = new LayerDrawable(layers); layerDrawable.SetLayerInset(0, 0, 0, 0, 0); return layerDrawable; } }
The same thing, I did for the iOS. I create a class which name is CustomPickerRenderer. I did not so much thing in the iOS because design already looks good.
public class CustomPickerRenderer : PickerRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) { base.OnElementChanged(e); var element = (CustomMyPicker)this.Element; } }
Now, I will show the how to use this custom picker in a view. For that we need the specify where the class is.
xmlns:custom="clr-namespace:CustomPicker.CustomRenderers"
Now, I added the picker.
<StackLayout Margin="10"> <custom:CustomMyPicker Title="Xamarin" TitleColor="Black" VerticalOptions="CenterAndExpand" HorizontalOptions="Fill" FontAttributes="Bold"> <custom:CustomMyPicker.Items> <x:String>Custom</x:String> <x:String>Renderer</x:String> </custom:CustomMyPicker.Items> </custom:CustomMyPicker> </StackLayout>
Here is the output of screen;