Prevent system FontSize change from affecting the size in the Xamarin Application

左心房为你撑大大i 提交于 2019-12-07 12:44:46

问题


So I noticed that an App I made will look messed up if the Font size in the users phone is changed to above medium, I googled a bit found many unanswered or answered but not to the point of the same question. I want to be able to do that in the PCL class if possible , if not possible then the most interesting platform for me is android so a fix specific for android would do. Here is a sample of my Xaml code so you can get a reference:

 <Label  Text="STORE" FontSize="23" HeightRequest="40" WidthRequest="212" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"></Label>

So to be clear the question is how do I prevent the system from overriding my fontsize which is 23 in this case?

Thanks


回答1:


For those who still struggle how to disable accessibility font scaling on Android. You need to create custom renderer for label, button and common input controls like this:

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Label), typeof(MyApp.Droid.Renderers.LabelRendererDroid))]
namespace MyApp.Droid.Renderers
{
    class LabelRendererDroid : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement == null) return;
            Control.SetTextSize(Android.Util.ComplexUnitType.Dip, (float)e.NewElement.FontSize);
        }
    }
}

For Xamarin picker controls there is no FontSize property, so we can add it to App class:

public static double NormalFontSize => Device.GetNamedSize(NamedSize.Medium, typeof(Picker));

and then utilize it in picker renderer:

Control.SetTextSize(Android.Util.ComplexUnitType.Dip, (float)App.NormalFontSize);

Also by changing this NormalFontSize property we can set whatever desired font size for picker, as it is not available without renderer.




回答2:


Have you seen the items in chapter 5 of this book? https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/

Although not an exact answer, depending on what you are attempting to do you might be able to use the example at the end of the chapter modified to allow for a "Max" font size. All from within the PCL.

It's worth noting however that the inability to scale the font to a big size could be an indication of accessibility problem.



来源:https://stackoverflow.com/questions/43290757/prevent-system-fontsize-change-from-affecting-the-size-in-the-xamarin-applicatio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!