Android APP 사용자 정의 글꼴 구현 방법 사용

안 드 로 이 드 시스템 내 장 된 글꼴
안 드 로 이 드 시스템 자체 에 일부 글꼴 이 내장 되 어 있 으 며 프로그램 에서 사용 할 수 있 으 며 xml 에서 textView 를 설정 할 때 글꼴 을 수정 하 는 스타일 을 지원 합 니 다.지원 필드 는 안 드 로 이 드:textStyle,안 드 로 이 드:typeface,안 드 로 이 드:font Family 입 니 다.시스템 에는 normal|bold|italic 세 가지 스타일 이 내장 되 어 있 습 니 다.normal,sans,serif,monospace,몇 가지 글꼴(실측 이 몇 가지 글꼴 은 영어 로 만 유효 합 니 다),typace 와 font Family 기능 이 같 습 니 다.
사용자 정의 글꼴 사용
이상 의 방식 으로 글꼴 의 스타일 을 바 꿀 수 있 습 니 다.사용자 정의 가 아 닙 니 다.안 드 로 이 드 시스템 은 TypeFace,즉 ttf 의 글꼴 파일 을 지원 합 니 다.프로그램 에 ttf 글꼴 파일 을 넣 고 Typeface 로 글꼴 을 설정 할 수 있 습 니 다.
첫 번 째 단 계 는 assets 디 렉 터 리 에 fonts 디 렉 터 리 를 새로 만 들 고 ttf 글꼴 파일 을 여기에 놓 습 니 다.

두 번 째 단계,프로그램 에서 호출:

public class MainActivity extends AppCompatActivity {
   private TextView textView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     textView= (TextView) findViewById(R.id.text);
     AssetManager assets = getAssets();
     Typeface fromAsset = Typeface.createFromAsset(assets, "fonts/fzlt.ttf");
     textView.setTypeface(fromAsset);
  }
}
ttf 파일 이름 은 중국 어 를 사용 할 수 없습니다.그렇지 않 으 면 불 러 올 수 없습니다.
사용 해 야 할 부분 에 대해 서 는 TextView 의 하위 클래스 를 써 서 통일 적 으로 처리 할 수 있 습 니 다.

public class CustomTextView extends TextView {
 
   public CustomTextView(Context context) {
     super(context);
     // TODO Auto-generated constructor stub
   }
 
   public CustomTextView(Context context, AttributeSet attrs) {
     super(context,attrs);
     // TODO Auto-generated constructor stub
   }
 
   public CustomTextView(Context context, AttributeSet attrs,int defStyle) {
     super(context,attrs,defStyle);
     // TODO Auto-generated constructor stub
   }
 
   public void setTypeface(Typeface tf, int style) {
     super.setTypeface(AppContext.getInstance().getTypeface());
   }
 
}
//사용자 정의 글꼴 초기 화
typeface = Typeface.createFromAsset(getAssets(), "fonts/fzlt.ttf");
법 은 단점 이 있 습 니 다.한 가지 컨트롤 의 글꼴 만 바 꿀 수 있 습 니 다.Button 이나 EditText 컨트롤 의 글꼴 을 바 꾸 려 면 같은 방식 으로 이 컨트롤 을 사용자 정의 해 야 합 니 다.이렇게 작업량 이 많 고 전체 app 의 글꼴 을 어떻게 효과적으로 바 꾸 는 지 아래 참고 자 료 를 참조 하 십시오.
웹 뷰 에서 사용자 정의 글꼴 사용 하기
로 컬 웹 페이지 에 대해 asset 디 렉 터 리 에 글꼴 파일 을 놓 고 css 에 다음 내용 을 추가 하여 글꼴 face 를 사용자 정의 하고 필요 한 곳 에 이 글꼴 face 를 사용 하면 됩 니 다.

<style>
@font-face {
   font-family: 'myface';
   src: url('file:///android_asset/fonts/fzlt.ttf');
}
body {
   margin: 0;
   padding: 0;
   font-family:'myface','        ';
}
.textbar{ box-sizing:border-box; width:100%; padding:5px;}
.textbar p{ font-size:16px; text-align:justify; color:#333;line-height:24px; margin:0 0 0 0;}
.textbar h1{ font-size:18px; margin:10px 0 10px 0;color:#000}
</style>
온라인 웹 페이지 에 서 는 글꼴 파일 을 서버 에 두 고 같은 방식 으로 글꼴 face 를 정의 하여 모든 곳 에 적용 해 야 합 니 다.
웹 페이지 나 서버 쪽 의 작업 을 줄 이기 위해 서 는 로 컬 주입 방식 으로 font-face 의 css 를 주입 하고 전체 웹 페이지 를 스타일 로 바 꿀 수 있 습 니 다.웹 뷰 에 웹 뷰 클 라 이언 트 를 사용자 정의 하고 onPageFinish 를 다시 쓰 며 다음 과 같은 내용 을 추가 합 니 다.

view.loadUrl("javascript:!function(){" + "s=document.createElement('style');s.innerHTML=" + "\"@font-face{font-family:myhyqh;src:url('**injection**/hyqh.ttf');}*{font-family:myhyqh !important;}\";"
+ "document.getElementsByTagName('head')[0].appendChild(s);" +
"document.getElementsByTagName('body')[0].style.fontFamily = \"myhyqh\";}()");
 
//               asset    ,                  ,      `file:
//android_assets/`  `**injection**/` ,       `shouldInterceptRequest`
//               ,      :
@Override
public WebResourceResponse shouldInterceptRequest (WebView view, String url){
   WebResourceResponse response = super.shouldInterceptRequest(view, url);
   Log.i("load intercept request:" + url);
   if (url != null && url.contains("**injection**/")) {
     //String assertPath = url.replace("**injection**/", "");
     String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length());
     try {
        response = new WebResourceResponse("application/x-font-ttf", "UTF8", getAssets().open(assertPath));
     } catch (IOException e) {
        e.printStackTrace();
     }
   }
   return response;
}



읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기