6
votes

I try to change the items font size in Xamarin.Picker for my Android app. In my project, I use BindablePicker that inherits from Picker class. Source here.

enter image description here

I spent some time to do research and I found that I should create a PickerRenderer class and render the Picker.

My renderer class:

public class BindablePickerRenderer : PickerRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        var picker = e.NewElement;
        BindablePicker bp = (BindablePicker)this.Element;

        if (this.Control != null)
        {
            var pickerStyle = new Style(typeof(BindablePicker))
            {

                Setters =
                {
                    new Setter { Property = VisualElement.BackgroundColorProperty, Value = Color.Red }

                }
            };
            picker.Style = pickerStyle;
        }
    }
}

For test purposes I set the backgroundColor for Picker and it works fine. However, in my PickerRenderer class I only have access to Control property which is type of Android.Widget.EditText.

The effect :

enter image description here

Question

How can I access to Picker items, and set the font size for them? Is this possible?

Here is my repository with an example project.

https://github.com/k8mil/PickerRendererXamarin

Related links

https://developer.xamarin.com/api/type/Xamarin.Forms.Picker/

Changing the default text color of a Picker control in Xamarin Forms for Windows Phone 8.1

Font size in Picker control in xamarin forms

2

2 Answers

1
votes

After some research I don't think this is possible for a generic picker.

You would likely have an easier time just rolling your own picker control in Forms code using a clickable label that pops up a list to select from.

I was able to style a date or time picker using styles in the Android styles.xml file, but since Android does not have a built in generic picker widget, I imagine that Forms is rolling it's own picker list as I can't find the dialog widget to theme that changes your list text size.

For a DatePicker, I can just add the following to the main style element in styles.xml:

<item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>

and then add a new style element in style.xml

<style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:textSize">60sp</item>
</style>

The above does change the text size for a DatePicker (no custom renderer required). Also the customer picker renderer is a bit of a misnomer... it really is just rendering the edit text field that shows the picked item, and allows opening the picker list on click.

I know this is not a solution, but just an indication as to what I found when checking this out and a suggestion that it is likely easiest to not use the Forms Picker type if you want such customization.

2
votes

I has been able to resolve this by add the line:

Control.TextSize = 30;

On OnElementChanged method:

public class BindablePickerRenderer : PickerRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        if (this.Control != null)
        {
            Control.TextSize = 30;
        }
    }
}

Maybe this can help someone that is looking for change font size of a Bindable picker.