Xamarin Forms FontSize 按平台
Xamarin Forms FontSize by Platform
UWP Xamarin Apps 存在一个已知问题,即 Windows 移动设备(不确定桌面设备 Windows 10)的字体大小比在其他设备上渲染的字体大很多两个平台 iOS 和 Android。我找到的修复方法是在 UWP 应用程序中放置一个带有小数点的数字字体大小(例如 24.1 表示大字体大小)。这很好用。我不希望在我的 App.xaml 中定义一个适用于所有平台的静态资源。我试过的,显然是行不通的,如下:
<OnPlatform x:Key="CustLarge" x:TypeArguments="x:Double">
<On Platform="iOS|Android">Large</On>
<On Platform="UWP">24.1</On>
</OnPlatform>
理论是,在我的 XAML 中,我会简单地将所有大字体编码为 "CustLarge",如下所示:
FontSize = "{StaticResource CustLarge}" />
有没有关于如何在不为我的应用程序中的每个 FontSize 在 OnPlatform 上执行此操作的情况下完成此操作的想法?任何帮助,将不胜感激。
更新:下面是我正在谈论的内容的屏幕截图。 iOS 模拟器适用于 iPhone 6 4.7" 宽。Windows 10 模拟器适用于 10.0.15254.9 5" phone。
您可以看到 Map All 文本比应有的大得多。 (我正在对独立按钮右侧的段控件中的文本进行相对比较。)在这两种情况下,字体大小都设置为 MICRO。
回到我的问题 - 有人知道怎么做吗?
我能够通过创建自定义 ResourceDictionnary 并在构造函数中添加 FontSizes 找到解决方法。
public class SResourceDictionnary : ResourceDictionary
{
public SResourceDictionnary()
{
Add("Micro", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Micro, typeof(Label)),
Platforms = { new On
{
Value = 12d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Small", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Small, typeof(Label)),
Platforms = { new On
{
Value = 14d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Medium", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
Platforms = { new On
{
Value = 18d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Large", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
Platforms = { new On
{
Value = 20d,
Platform = new List<string>{"UWP"}
}
}
});
}
然后我像这样 App.xaml 合并了字典
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<helpers:SResourceDictionnary></helpers:SResourceDictionnary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Label">
<Setter Property="FontSize" Value="{StaticResource Small}" ></Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
它允许我使用 FontSize 作为 StaticResource。
唯一的缺点是你在 Xaml
中失去了智能感知
UWP Xamarin Apps 存在一个已知问题,即 Windows 移动设备(不确定桌面设备 Windows 10)的字体大小比在其他设备上渲染的字体大很多两个平台 iOS 和 Android。我找到的修复方法是在 UWP 应用程序中放置一个带有小数点的数字字体大小(例如 24.1 表示大字体大小)。这很好用。我不希望在我的 App.xaml 中定义一个适用于所有平台的静态资源。我试过的,显然是行不通的,如下:
<OnPlatform x:Key="CustLarge" x:TypeArguments="x:Double">
<On Platform="iOS|Android">Large</On>
<On Platform="UWP">24.1</On>
</OnPlatform>
理论是,在我的 XAML 中,我会简单地将所有大字体编码为 "CustLarge",如下所示:
FontSize = "{StaticResource CustLarge}" />
有没有关于如何在不为我的应用程序中的每个 FontSize 在 OnPlatform 上执行此操作的情况下完成此操作的想法?任何帮助,将不胜感激。
更新:下面是我正在谈论的内容的屏幕截图。 iOS 模拟器适用于 iPhone 6 4.7" 宽。Windows 10 模拟器适用于 10.0.15254.9 5" phone。
您可以看到 Map All 文本比应有的大得多。 (我正在对独立按钮右侧的段控件中的文本进行相对比较。)在这两种情况下,字体大小都设置为 MICRO。
回到我的问题 - 有人知道怎么做吗?
我能够通过创建自定义 ResourceDictionnary 并在构造函数中添加 FontSizes 找到解决方法。
public class SResourceDictionnary : ResourceDictionary
{
public SResourceDictionnary()
{
Add("Micro", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Micro, typeof(Label)),
Platforms = { new On
{
Value = 12d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Small", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Small, typeof(Label)),
Platforms = { new On
{
Value = 14d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Medium", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
Platforms = { new On
{
Value = 18d,
Platform = new List<string>{"UWP"}
}
}
});
Add("Large", new OnPlatform<double>
{
Default = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
Platforms = { new On
{
Value = 20d,
Platform = new List<string>{"UWP"}
}
}
});
}
然后我像这样 App.xaml 合并了字典
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<helpers:SResourceDictionnary></helpers:SResourceDictionnary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Label">
<Setter Property="FontSize" Value="{StaticResource Small}" ></Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
它允许我使用 FontSize 作为 StaticResource。 唯一的缺点是你在 Xaml
中失去了智能感知