Xaml 防止系统大小更改影响Xamarin应用程序中的大小
因此,我注意到,如果用户手机中的字体大小改为中等以上,我制作的一个应用程序就会看起来一团糟。我在谷歌上搜索了一下,发现有许多问题没有答案,但没有找到相同的问题。 如果可能的话,我希望能够在PCL类中做到这一点,如果不可能的话,那么对我来说最有趣的平台是android,所以针对android的修复就可以了。 以下是我的Xaml代码示例,您可以获得参考:Xaml 防止系统大小更改影响Xamarin应用程序中的大小,xaml,xamarin,xamarin.android,portable-class-library,Xaml,Xamarin,Xamarin.android,Portable Class Library,因此,我注意到,如果用户手机中的字体大小改为中等以上,我制作的一个应用程序就会看起来一团糟。我在谷歌上搜索了一下,发现有许多问题没有答案,但没有找到相同的问题。 如果可能的话,我希望能够在PCL类中做到这一点,如果不可能的话,那么对我来说最有趣的平台是android,所以针对android的修复就可以了。 以下是我的Xaml代码示例,您可以获得参考: <Label Text="STORE" FontSize="23" HeightRequest="40" WidthRequest="2
<Label Text="STORE" FontSize="23" HeightRequest="40" WidthRequest="212" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"></Label>
所以要明确的问题是,如何防止系统覆盖我的fontsize,在这种情况下是23
谢谢您看过本书第五章的内容了吗? 虽然不是一个确切的答案,但根据您试图做的事情,您可能可以使用本章末尾的示例进行修改,以允许使用“最大”字体大小。全部来自PCL内部
然而,值得注意的是,无法将字体缩放到大尺寸可能是易访问性问题的一个迹象。对于那些仍在努力在Android上禁用易访问性字体缩放的人来说。 您需要为标签、按钮和常用输入控件创建自定义渲染器,如下所示:
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);
}
}
}
然后在选择器渲染器中使用它:
Control.SetTextSize(Android.Util.ComplexUnitType.Dip, (float)App.NormalFontSize);
另外,通过更改此NormalFontSize属性,我们可以为picker设置所需的任何字体大小,因为如果没有渲染器,它将不可用。只需在创建后将其添加到MainActivity中即可
#region Font size change Prevent
public override Resources Resources
{
get
{
var config = new Configuration();
config.SetToDefaults();
return CreateConfigurationContext(config).Resources;
}
}
#endregion Font size change Prevent
Gary McGee为标签和按钮构建了精确的自定义渲染器类。此外,BrianLK还提供了一种方法,该方法可以在以后的线程中为条目执行大部分工作。祝你好运当用户将字体大小设置得太大时,出现字体大小溢出对话框问题。这通过将FontScale重置为1作为默认值解决了问题。
#region Font size change Prevent
public override Resources Resources
{
get
{
var config = new Configuration();
config.SetToDefaults();
return CreateConfigurationContext(config).Resources;
}
}
#endregion Font size change Prevent