Android 는 어떻게 동적 으로 응용 글꼴 크기 를 조정 하 는 지 상세 하 게 설명 합 니 다.

머리말
글꼴 크기 를 동적 으로 설정 하 는 이 유 는 무엇 입 니까?프로젝트 가 직면 하 는 것 은 중장 년 고객 프로젝트 에서 자체 적 으로 가지 고 있 는 글씨체 가 고객 의 수 요 를 만족 시 킬 수 없 기 때문이다.
Android 응용 글꼴 크기 는 기본적으로 시스템 에서 설정 한 글꼴 크기 에 따라 달라 집 니 다.그러나 응용 글꼴 크기 가 시스템 설정 에 따라 달라 지 는 것 을 원 하지 않 을 수도 있 습 니 다.예 를 들 어 위 챗 과 같은 것 을 스스로 제어 하려 고 할 수도 있 습 니 다.본 고 는 시스템 설정 에 의존 하 는 것 이 아니 라 글꼴 크기 의 동적 조정 을 어떻게 실현 하 는 지 간단하게 소개 한다.
글꼴 크기 변 화 는android.content.res.Configuration.class클래스 의 fontScale 에서 제어 합 니 다.따라서 우리 의 응용 글꼴 크기 변 화 는 시스템 에 따라 변 하지 않 고 우리 가 스스로 제어 하려 면 fontScale 이 우리 자신 에 게 설정 한 수 치 를 수정 해 야 합 니 다.안 드 로 이 드 시스템 업데이트 문제 로 인해 인터넷 의 답 을 통 해 귀하 의 목적 을 실현 할 수 없 을 수도 있 습 니 다.현재 필자 의 테스트 상황 에 따라 우 리 는 Activity 차원 에서 처리 해 야 글씨체 의 크기 변 화 를 자율 적 으로 제어 할 수 있 습 니 다.통일 적 으로 처리 하기 위해 제어 논 리 를 application 에 두 었 습 니 다.아래 에 인 스 턴 스 이미지 와 코드 를 붙 입 니 다.(필자 의 수준 이 너무 낮 아서 슬라이더 를 만들어 글씨체 의 크기 를 제어 하지 못 하기 때문에..예제 에 서 는 두 개의 TextView 를 사용 하여 글꼴 크기 변 화 를 제어 합 니 다.하하 하~)

public class MainApplication extends Application implements Application.ActivityLifecycleCallbacks {
 private List<Activity> activityList;
 private float fontScale;
 private SharedPreferences preferences;
 private static MainApplication mainApplication;

 @Override
 public void onCreate() {
  super.onCreate();
  init();
 }

 private void init() {
  mainApplication = this;
  preferences = PreferenceManager.getDefaultSharedPreferences(this);
  fontScale = getFontScale();
  registerActivityLifecycleCallbacks(this);
 }

 public static float getFontScale() {
  float fontScale = 1.0f;
  if (mainApplication != null) {
   fontScale = mainApplication.preferences.getFloat("fontScale", 1.0f);
  }
  return fontScale;
 }

 @Override
 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  if (activityList == null) {
   activityList = new ArrayList<>();
  }
  //              
  Resources resources = activity.getResources();
  if (resources != null && resources.getConfiguration().fontScale != fontScale) {
   android.content.res.Configuration configuration = resources.getConfiguration();
   configuration.fontScale = fontScale;
   resources.updateConfiguration(configuration, resources.getDisplayMetrics());
  }
  activityList.add(activity);
 }

 @Override
 public void onActivityStarted(Activity activity) {

 }

 @Override
 public void onActivityResumed(Activity activity) {

 }

 @Override
 public void onActivityPaused(Activity activity) {

 }

 @Override
 public void onActivityStopped(Activity activity) {

 }

 @Override
 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

 }

 @Override
 public void onActivityDestroyed(Activity activity) {
  if (activityList != null) {
   activityList.remove(activity);
  }
 }

 public static void setAppFontSize(float fontScale) {
  if (mainApplication != null) {
   List<Activity> activityList = mainApplication.activityList;
   if (activityList != null) {
    for (Activity activity : activityList) {
     if (activity instanceof SettingActivity) {
      continue;
     }
     Resources resources = activity.getResources();
     if (resources != null) {
      android.content.res.Configuration configuration = resources.getConfiguration();
      configuration.fontScale = fontScale;
      resources.updateConfiguration(configuration, resources.getDisplayMetrics());
      activity.recreate();
      if (fontScale != mainApplication.fontScale) {
       mainApplication.fontScale = fontScale;
       mainApplication.preferences.edit().putFloat("fontScale", fontScale).apply();
      }
     }
    }
   }
  }
 }
}
우선,애플 리 케 이 션 이 Activity LifecycleCallbacks 인 터 페 이 스 를 실현 하고 모든 Activity 를 감시 하고 Activity 목록 을 유지 하기 위해 Activity LifecycleCallbacks 를 등록 해 야 합 니 다.onActivity Created 방법 에서 우 리 는 모든 Activity 의 생 성 을 감시 할 수 있 습 니 다.새로운 Activity 를 만 들 때 리 소스 자원 을 가 져 와 서Configuration.fontScale수치 가 우리 자신의 fontScale 수치(기본 1.0,즉 크기 가 조정 되 지 않 았 음)와 같 는 지 판단 할 수 있 습 니 다.수치 가 일치 하지 않 으 면 수정 합 니 다.사실,우리 가 하나의 Activity 를 통 해Configuration.fontScale수 치 를 수정 하면 모든 다른 Activity 가 Configuration.fontScale 수 치 를 다시 가 져 올 때 그 값 은 우리 가 수정 한 후의 수치 입 니 다.이 작업 을 통 해 우리 의 응용 글꼴 크기 가 시스템 설정 에 따라 변 하지 않도록 보장 되 었 습 니 다.
응용 글꼴 크기 를 어떻게 동적 으로 조정 하 는 지,setAppFontSize 방법 을 살 펴 보 겠 습 니 다.이 방법 은 Activity 목록 을 옮 겨 다 니 며 리 소스 설정 정 보 를 얻 고 fontScale 수 치 를 수정 합 니 다.제때에 효력 이 발생 하려 면 Activityrecreate()방법 을 호출 해 야 합 니 다.
메모:recreate()방법 은 Activity 재 구축 을 가 져 올 수 있 습 니 다.그러나 다행히도 이 방법 을 사용 하면 시스템 이 onSave InstanceState 리 셋 을 실행 할 수 있 습 니 다.따라서 이 리 셋 방법 에서 데 이 터 를 저장 하여 재 구축 할 때 데 이 터 를 복원 하 는 것 을 강력 히 권장 합 니 다.
또 다른 제안 은 글꼴 크기 설정 옵션 을 너무 깊이 묻 지 말고 첫 페이지 에 두 는 것 이 좋 습 니 다.이렇게 놓 으 면 글꼴 크기 를 조정 할 때 첫 페이지 만 재 구축 되 고 다른 페이지 에 영향 을 주지 않 으 며 영향 을 최소 화 할 수 있 기 때 문 입 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기