2016-06-13 4 views
2

나는 각 접시 양식 위에 맞춤식 다운로드 글꼴을 갖기 위해 Xamarin에 의해 제안 된 Fonts Tutorial을 따라 가고 있습니다. 그러나, 나는 많은 문제를 가지고 있고 또한 어떤 일을하는 방법을 찾으려고 노력하지만 whitout이 그것을 작동시키는 방법을 찾는다.Xamarin 양식 사용자 정의 글꼴 CrossPlatform

먼저 튜토리얼을 살펴보고 관련 부분부터 시작하십시오. Using a Custom Font


아이폰 OS는 :

그것은 우리가 리소스 폴더 font.tff을 추가 할 필요가 있다고 말한다. 그렇다면 우리는 Info.plist로 무엇인가해야합니다. 내가해야 할 일을 이해하지 못합니다.

안드로이드 : 사용자 정의 렌더러가 필요하므로 안드로이드에 대한

Xamarin.Forms 현재, 사용자 정의 글꼴 파일에 글꼴을 설정할 수있는 기능을 노출하지 않습니다. 문서에 따르면

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; 
     } 
    } 
} 

OnElementChanged()는하지만, 그렇지 않습니다,라는 것입니다. Debug.WriteLine()은 아무 것도 표시하지 않습니다. 왜?

WinPhone 8.1 :

우리는 응용 프로그램 프로젝트의 /Assets/Fonts/ 폴더에 글꼴 파일을 추가하고 빌드 작업을 설정해야합니다 : 내용. 일단 실현되면 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> 

레이블의 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" 
     ); 
    } 
} 

어느 쪽도 작동하지 않습니다!또한 XAML 부분에 관해 나에게 흥미로운 것을 보았습니다. 나는 FontFamily가 언젠가는 .. defintion을 갖기를 원한다. 나의 페이지의 모든 Label의 FontFamily를 설정하기 위해 하나의 필드 문자열을 편집 할 수있게 해준다.

<ContentPage.Resources> 
    <ResourceDictionary> 

    </ResourceDictionary> 
</ContentPage.Resources> 

MyPage.xaml의 모든 Label에 대해 FontFamily를 정의 할 수 있음을 확인했습니다. 어떻게 작동합니까?

는 또한 MVVM에 대한 안돼서 그러나 나는 성공없이 XAML <Label Text="Hello World !" FontFamily="{Binding FontFamily}"/>하지만 한 번 더에 정의 된 레이블에 내 public string FontFamily { get; set; }을 결합하는 시도 ..

내가 totaly 붙어있어 ... 누가 수 작업을 자습서로 만들거나 튜토리얼 후에 언급 한 각 항목을 설명하십시오. 도와 줘서 고마워!

+1

해당 가이드에서 링크 된 블로그 항목을 읽으십시오. info.plist 수정에 대한 자세한 설명이 있습니다. – Jason

+0

한 번에 하나의 플랫폼에 대해서도 시도해 볼 수 있습니다. 하나의 게시물에 여러 질문을 넣었으므로, 간결하게 대답하기가 어려운 – Jason

+1

답장을 보내 주셔서 감사합니다. 그래, 다른 사람들을 위해 (안드로이드/WinPhone) 왜 작동하지 않습니다? 나는 단지 같은 이슈를 가지고있는 사람들에게 질문/대답을 유용하게하고 싶다. – Emixam23

답변

14

저는 Xamarin Forms 접근 방식이 사용자 정의 렌더러 (또는 효과 등)보다 훨씬 쉽다고 생각합니다. 첫째, 공식 가이드가 있습니다 : https://developer.xamarin.com/guides/xamarin-forms/user-interface/text/fonts/#Using_a_Custom_Font. 이 예에서 글꼴 파일은 글꼴의 하위 폴더에 저장 된 세 가지 플랫폼의

<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="WinPhone" Value="\Assets\Fonts\OpenSans-Semibold.ttf#Open Sans"/> 
      </OnPlatform> 
     </Label.FontFamily> 
    </Label> 

: 날이 었죠에 대한

아이폰 OS, 안드로이드, 및 UWP에 대한 작업 솔루션. 위의 Android 및 UWP (WinPhone) 경로에 반영된 것을 볼 수 있습니다. iOS에서 plist 항목은 사용자 정의 글꼴에 대한 경로 정보를 보유합니다.

가장 어려운 부분은 글꼴 이름/기본 글꼴을 알아내는 것이 었습니다. 안드로이드와 UWP/WinPhone에 대한 "#"다음의 차이점에 주목하십시오. 시행 착오의 결합 (Android) 및 필요한 특이성을 지적하기 위해이 기사 덕분에 : http://www.blendrocks.com/code-blend/2015/01/04/a-complete-guide-to-working-with-custom-fonts-in-your-windows-and-windows-phone-app.

이 기사의 가장 관련성있는 부분은 선호하는 글꼴 이름이 얼마나 까다 롭고 분명하지 않은지입니다. Windows 글꼴 뷰어 (및 Mac Font Book 역시 btw, afaik)는 기본 설정 패밀리 이름을 표시하지 않습니다. 기사에서 :

이 부분 "#Helvetica 뉴 LT 표준"은 선호하는 가족을 포함하는 접미사입니다. 맞춤 글꼴이 작동하려면 필요합니다. 접미사는 절대적으로 정확해야하며 대소 문자를 구분해야합니다.

  • 가장 쉽게 찾는 방법은 dp4 font viewer라는 도구를 사용하는 것입니다. 무료이며 downloaded here을 찾을 수 있습니다. 프로그램을 통해 글꼴 을 찾으십시오. 정보 탭으로 이동하여 원하는 가족을 복사하십시오.
  • 올바른 기본 글꼴 그룹이 표시되지 않으므로 Windows 내장 글꼴 뷰어를 사용하지 마십시오.

편집 : OnPlatform 스 니펫을 현재 ​​권장되는 구문으로 업데이트했습니다.