所以我正在开发一个用于平板电脑的Xamarin.Forms
应用程序,现在我需要它也可以在手机上运行 - 很好,Xamarin.Forms应该处理所有这些(或者我认为)。
我在手机上运行了该应用程序,但它没有缩小字体(或任何尺寸,但我会以字体开头)
我创建了一个类似的扩展方法:
[ContentProperty("FontSize")]
public class FontExtension : IMarkupExtension
{
public string FontSize { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
double fontSize;
if (FontSize == null)
throw new Exception("No Font Size provided");
if (!double.TryParse(FontSize, out fontSize))
throw new Exception("Font Size Provided is not a double");
return App.Scaling * fontSize;
}
}
我在我的应用程序FontSize={ns:Font 18}
中使用它,这会根据App.Scaling
属性缩减我的应用程序。如果属性为0.8
,则此属性设置为Phone
。
我还发现两个链接在Xamarin.Android
中提供了一种方式,但我正在进行Xamarin.Forms
申请,因此不适用。 (link1,link2)
是否可以根据设备分辨率而非成语来缩小字体?
答案 0 :(得分:2)
您可以使用其他两个选项。
OnIdiom
- 依赖值。我知道您希望完全控制大小,但根据我的经验,它不太适合开发过程。特别是,每次都定义所有文本大小。很常见的方法是在资源字典中使用Style
。样式定义可能占用很多空间,但是将它们应用到控件上要快得多。
所以,你可以这样做:
<ResourceDictionary>
<Application.Resources>
<OnIdiom x:TypeArguments="x:Double" x:Key="MySize" Phone="15" Tablet="24"/>
<Style TargetType="Label" x:Key="MyCustomStyle">
<Setter Property="FontSize" Value="{StaticResource MySize}"></Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
和
<Label Style="{StaticResource MyCustomStyle}" Text="My Text"/>
使用DynamicResource
作为described here。
<Style x:Key="myDerivedCustomStyle" TargetType="Label" BaseResourceKey="myCustomStyle">
...
</Style>
并计算C#代码中所需的所有值:
var myCustomStyle = new Style (typeof(Label)) {
// calculating and defining required FontSize here
};
Resources = new ResourceDictionary();
Resources.Add ("myCustomStyle", myCustomStyle);
答案 1 :(得分:0)
Xamarin Forms提供了一些命名尺寸 - 小型,中型,大型等,可以满足您的需求。根据您的平台,这些最终会有不同的尺寸。
https://developer.xamarin.com/guides/xamarin-forms/user-interface/text/fonts/#Font_Size