자마린에서 기본 폰트가 아닌 다른 폰트를 사용하는 방법입니다.

 

우선 폰트를 다운 받습니다.

전 타이포_어울림체를 다운받았습니다.(무료)

 

폰트파일을 아래처럼 위치시킵니다.

(폴더구성은 다르게 해도 상관없습니다.)

 

 

각 폰트 속성에서 "포함리소스"(Embedded Resource) 를 선택합니다.

 

 

이제 준비는 끝났습니다.

App.xaml.cs 로 들어가 아래 처럼 namespace 위쪽에 assembly 를 정의합니다.

(참고로  Xamarin.forms  구버전이면 동작하지 않습니다.)

 

[assembly: ExportFont("Typo_EoulrimL.ttf", Alias = "RegularFont")]

[assembly: ExportFont("Typo_EoulrimM.ttf", Alias = "MediumFont")]

[assembly: ExportFont("Typo_EoulrimB.ttf", Alias = "BoldFont")]

 

 

 

 

이제 xaml 단에서 아래처럼 위에서 정의한 Alias 로 FontFamily 에 지정해서 쓰면됩니다.

(여러가지 방법이 있지만 이 방법이 저한테는 가장 간단한거 같습니다.)

 

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"

             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

             xmlns:local="clr-namespace:FontXam"

             x:Class="FontXam.MainPage">

 

    <StackLayout>

        <Label Text="안녕하세요(기본)" FontSize="20"

           HorizontalOptions="Center"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(BoldFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="BoldFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(MediumFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="MediumFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(RegularFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="RegularFont"

           VerticalOptions="CenterAndExpand" />

    </StackLayout>

 

</ContentPage>

 

 

(결과)

iOS

 

 

Android

 

소스

https://github.com/kei-soft/FontXam

 

 

 

모바일에서 기본 폰트는 깔끔하지만

디자인을 위해 다른 폰트를 적용하고 싶을 때가 있습니다.

안드로이드, iOS  에 적용하는 방법을 소개합니다.

 

우선 Android 안드로이드나 iOS 프로젝트에 폰트 파일을 import 시켜야합니다.

(폰트 파일 예시 : Binggrae.ttf)

Android 프로젝트는 Assets 폴더에

iOS 프로젝트는 Resources 폴더에 폰트 파일을 추가합니다.

추가로, iOS 는 Info.plist 파일에 아래 처럼 내용을 추가해야합니다.

<key>UIAppFonts</key>
 <array>
  <string>Binggrae.ttf</string>
 </array>

 

이제 각 프로젝트(Android,iOS)에 파일을 하나씩 추가해야합니다.

ExtendedRendrerer 를 추가할껀데 이것의 의미는 쉽게 말하면 기본 컨트롤에 대해서

각 기기 별로 커스텀하게 적용할 부분이 필요할 때 사용되는 것이라 보면됩니다.

우리는 폰트를 변경할 것이므로 폰트만 바꾸는 코드를 넣을 것입니다.

Button 예시입니다.

Android

using Android.Content;
using Android.Graphics;
using Test.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Button), typeof(ExtendedButtonRenderer))]
namespace Test.Droid
{
    public class ExtendedButtonRenderer : ButtonRenderer
    {
        public ExtendedButtonRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                  Control.Typeface = Typeface.CreateFromAsset(base.Context.Assets, "Binggrae.ttf");
            }
        }
    }
}

iOS

using Test.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(Button), typeof(ExtendedButtonRenderer))]
namespace Test.iOS
{
    public class ExtendedButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                Control.Font = UIKit.UIFont.FromName("Binggrae", (System.nfloat)e.NewElement.FontSize);
            }
        }
    }
}

위처럼 적용하면 앱내 모든 버튼의 Text 는 Binggrae 폰트가 적용되어 보여집니다.

Picker, Entry, Label.. 등의 컨트롤 모두가 ExtendedRendrerer 를 구성해야 폰트가 적용됨을 유의해야합니다.

 

추가로 Android 는 한가지 방법이 더 있습니다.

아래 처럼 각 컨트롤의 FontFamily 에 아래처럼 폰트 파일명과 폰트 이름을 넣으면 폰트가 적용됩니다.

FontFamily="Binggrae.ttf#Binggrae"

(iOS 는 안됨.^^;)

 

+ Recent posts