Emi*_*m23 4 fonts cross-platform xamarin.forms
我正在遵循Xamarin提出的字体教程,在每个平台上都有自定义下载字体.然而,我遇到了很多问题,我也试图找到一种方法来做一些事情,但是whitout找到了如何使它工作.
首先,看一下教程,从相关部分开始.使用自定义字体
iOS版:
它说我们必须将font.tff添加到Resources文件夹中. 然后,我们必须对Info.plist做一些事情,但是什么呢?我不确定我该怎么做.
安卓:
Xamarin.Forms for Android目前没有公开将字体设置为自定义字体文件的功能,因此需要自定义渲染器.
CustomLabelRenderer.cs
public class CustomLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
System.Diagnostics.Debug.WriteLine(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
if (!string.IsNullOrEmpty(e.NewElement?.StyleId))
{
var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
Control.Typeface = font;
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档,OnElementChanged()将被称为,但它没有.Debug.WriteLine()不显示任何内容.为什么?
WinPhone 8.1:
我们必须将字体文件添加到/Assets/Fonts/应用程序项目中的文件夹,并设置Build Action:Content.一旦实现,Windows Phone的Xamarin.Forms可以通过遵循特定的命名标准引用已添加到项目中的自定义字体.但是,字体不会在视图上发生,字体保持标准,为什么?
目前,经过大量的搜索,很多尝试...没什么..
我正在尝试添加DIN Condensed Bold字体
我的XAML布局:
<ContentPage.Content>
<AbsoluteLayout BackgroundColor="#235A5E">
<!-- Menu -->
<AbsoluteLayout x:Name="Menu" BackgroundColor="#2F767B"
AbsoluteLayout.LayoutBounds="0,0,1,0.1"
AbsoluteLayout.LayoutFlags="All">
<Label x:Name="label" Text="Connection" TextColor="White" FontSize="30" VerticalOptions="Center" HorizontalOptions="Center"
AbsoluteLayout.LayoutBounds="0.5, 0, 0.8, 1"
AbsoluteLayout.LayoutFlags="All"/>
<Button x:Name="ConnectionButton" BackgroundColor="Transparent" BorderColor="Transparent"
AbsoluteLayout.LayoutBounds="1, 0.5, 0.2, 1"
AbsoluteLayout.LayoutFlags="All"/>
</AbsoluteLayout>
</AbsoluteLayout>
</ContentPage.Content>
Run Code Online (Sandbox Code Playgroud)
所以Label的FontFamily属性可以这样设置
<Label Text="Hello World !" FontFamily="DIN Condensed Bold"
但是,正如教程中所说,对于WinPhone的例子,它必须通过另一种方式完成,因此,我尝试通过C#部分更改FontFamily.
public partial class MyPage : ContentPage
{
public string FontFamily { get; set; }
public MyPage()
{
InitializeComponent();
label.FontFamily = Device.OnPlatform(
iOS: "DIN Condensed Bold",
Android: "DIN Condensed Bold",
WinPhone: @"Assets\Fonts\DINCondensedBold.ttf#DIN Condensed Bold"
);
}
}
Run Code Online (Sandbox Code Playgroud)
哪个也行不通!我也看到了一些关于XAML部分的有趣内容.我想(如果FontFamily有一天工作......)defintion让我能够只编辑一个字段字符串来设置我页面的所有Label的FontFamily.
<ContentPage.Resources>
<ResourceDictionary>
</ResourceDictionary>
</ContentPage.Resources>
Run Code Online (Sandbox Code Playgroud)
我看到我可能能够为MyPage.xaml的所有Label定义FontFamily,它是如何工作的?
我也是一个关于MVVM的新手,但是我试图将我绑定public string FontFamily { get; set; }到xaml中定义的Label <Label Text="Hello World !" FontFamily="{Binding FontFamily}"/>但是又一次没有成功.
我完全陷入困境......谁可以帮助将教程作为教程,或者在教程之后向我解释我提到的每一件事.谢谢你的帮助!
Den*_*elu 19
我认为在某些方面,Xamarin Forms方法比使用自定义渲染器(或效果等)更容易.首先,有官方指南:https://developer.xamarin.com/guides/xamarin-forms/user-interface/text/fonts/#Using_a_Custom_Font.
iOS,Android和UWP的工作解决方案对我来说最终是:
<Label Text="The sly fox jumps over the lazy brown dog.">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="OpenSans-Semibold"/>
<On Platform="Android" Value="Fonts/OpenSans-Semibold.ttf#OpenSans-Semibold"/>
<On Platform="UWP" Value="Assets\Fonts\OpenSans-Semibold.ttf#Open Sans"/>
</OnPlatform>
</Label.FontFamily>
</Label>
Run Code Online (Sandbox Code Playgroud)
对于所有三个平台,此示例中的字体文件存储在Fonts子文件夹中.你看到上面的Android和UWP(WinPhone)路径反映了这一点.在iOS中,plist条目将路径信息保存到自定义字体.
最困难的部分是弄清楚字体名称/首选字体.请注意Android和UWP/WinPhone的"#"之后的差异.试错结合(Android)并感谢本文帮助指出所需的特异性:http://www.blendrocks.com/code-blend/2015/01/04/a-complete-guide-to-使用自定义字体在你的windows和windows-phone-app中工作.
该文章中最相关的部分是挑选和不明显的首选字体名称.Windows字体查看器(以及Mac字体书,btw,afaik)不会显示首选系列名称.来自文章:
该部分"#Helvetica Neue LT Std"是包含首选系列的后缀.这是自定义字体工作所必需的.后缀必须绝对正确,并且区分大小写.
- 找到它的最简单方法是使用一个名为dp4 font viewer的工具.它是免费的,可以在这里下载.通过该程序找到您的字体,转到信息点击复制首选系列.
- 不要使用Windows内置的字体查看器,因为它不显示正确的首选字体系列.
编辑:将OnPlatform代码段更新为当前推荐的语法.
EDIT2:将WinPhone平台更改为UWP并删除了UWP路径的反斜杠'\' - 没意识到UWP/WinPhone没有工作!还修复了dp4字体查看器的下载链接,因为它现在需要"https".
| 归档时间: |
|
| 查看次数: |
7147 次 |
| 最近记录: |