[Delphi] 델파이 안드로이드 커스텀 폰트 사용

    728x90

    안녕하세요

    로로봉입니다 : )

    오늘은 델파이에서 안드로이드 앱 개발 중 기본 폰트가 아닌 커스텀 폰트를 사용해보도록 하겠습니다.

    안드로이드에서 커스텀 폰트를 사용하기 위해선 ttf 파일을 프로젝트에 포함시켜주어야 합니다.

     나눔스퀘어라운드 폰트를 사용하고자 할 때 제어판-글꼴에서 ttf 파일을 복사하여 가져옵니다. 

    [ 그림 1 : 나눔스퀘어라운드 폰트 파일 ]

     사용하기 쉽도록 Bold와 ExtraBold 파일을 아래와 같이 이름을 변경해주었습니다.

    [ 그림 2 : 나눔스퀘어라운드 파일명 변경 ]

    이제 프로젝트에서 사용하는 방법은 ttf 파일명이 폰트의 Family에 동일하게 설정해주면 됩니다. 

    [ 그림 3: 프로젝트 폰트명 설정 ]

     Family명을 맞춰준 뒤 실제 컴파일프로젝트에 ttf 파일을 포함시켜주어야 됩니다.

     Project – Deplyment 를 선택합니다. 

    [ 그림 4 : Deployment 메뉴 ]

     열리는 Deployment 창에서 ttf 파일을 추가해줍니다.

    [ 그림 5 : ttf 파일 추가 ]

     반드시 Remoth Path에는 .\assets\internal\ 경로로 지정해주어야 어플리케이션이 컴파일될 때 ttf 파일이 해당 경로에 저장되게 됩니다.



    델파이 10.4 버전에서는 FontGlyphs 파일이 수정되어 있어서 별도의 작업을 하지 않아도 되지만 이전 버전인 10.3버전에서만 해도 FontGlyphs 파일을 커스텀 폰트를 찾을 수 있도록 수정해 주어야 합니다.

    일반적으로 아래의 경로에 FMX.FontGlyphs.Android.pas 파일이 존재합니다.

    C:\Program Files (x86)\Embarcadero\Studio\20.0\source\fmx\

    FMX.FontGlyphs.Android.pas 파일을 복사하여 실행 프로젝트로 가져옵니다.

    [ 그림 6 : FontGlyphs 파일 복사 ]

     

    이제 복사해온 FMX.FontGlyphs.Android.pas 파일을 열어서 아래와 같이 수정해주고 저장합니다.

    uses 절에 System.IOUtils, FMX.FontGlyphs 추가

      LoadResource 프로시저 수정

    procedure TAndroidFontGlyphManager.LoadResource;
    var
      TypefaceFlag: Integer;
      Typeface: JTypeface;
      FamilyName: JString;
      Metrics: JPaint_FontMetricsInt;
      NomeFonte : string;
    begin
      FPaint.setAntiAlias(True);
      FPaint.setTextSize(CurrentSettings.Size * CurrentSettings.Scale);
      FPaint.setARGB(255, 255, 255, 255);
      if TOSVersion.Check(4, 0) then
        FPaint.setHinting(TJPaint.JavaClass.HINTING_ON);
      //Font
      try
        FamilyName := StringToJString(CurrentSettings.Family);
        if not CurrentSettings.Style.Slant.IsRegular and not CurrentSettings.Style.Weight.IsRegular then
          TypefaceFlag := TJTypeface.JavaClass.BOLD_ITALIC
        else
          if not CurrentSettings.Style.Weight.IsRegular then
            TypefaceFlag := TJTypeface.JavaClass.BOLD
          else
            if not CurrentSettings.Style.Slant.IsRegular then
              TypefaceFlag := TJTypeface.JavaClass.ITALIC
            else
              TypefaceFlag := TJTypeface.JavaClass.NORMAL;
    
    //    Typeface := TJTypeface.JavaClass.create(FamilyName, TypefaceFlag);
        NomeFonte := TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family + '.ttf');
        if FileExists(NomeFonte) then
          Typeface := TJTypeface.JavaClass.createFromFile(StringToJString(NomeFonte))
        else
          Typeface := TJTypeface.JavaClass.create(FamilyName, TypefaceFlag);
    
        FPaint.setTypeface(Typeface);
        try
          Metrics := FPaint.getFontMetricsInt;
          //
          FTop := Metrics.top;
          FAscent := Metrics.ascent;
          FDescent := Metrics.descent;
          FBottom := Metrics.bottom;
          FLeading := Metrics.leading;
        finally
          Metrics := nil;
        end;
      finally
        FamilyName := nil;
        Typeface := nil;
      end;
    end;
    

      위와 같이 수정해주고 컴파일하게 되면 ttf 파일을 잘 불러와서 폰트가 변경되는 것을 볼 수 있습니다.

     

    좋아요♥ + 구독 부탁드립니다 : )

    728x90
    반응형

    댓글