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 수 치 를 수정 합 니 다.제때에 효력 이 발생 하려 면 Activity
recreate()
방법 을 호출 해 야 합 니 다.메모:
recreate()
방법 은 Activity 재 구축 을 가 져 올 수 있 습 니 다.그러나 다행히도 이 방법 을 사용 하면 시스템 이 onSave InstanceState 리 셋 을 실행 할 수 있 습 니 다.따라서 이 리 셋 방법 에서 데 이 터 를 저장 하여 재 구축 할 때 데 이 터 를 복원 하 는 것 을 강력 히 권장 합 니 다.또 다른 제안 은 글꼴 크기 설정 옵션 을 너무 깊이 묻 지 말고 첫 페이지 에 두 는 것 이 좋 습 니 다.이렇게 놓 으 면 글꼴 크기 를 조정 할 때 첫 페이지 만 재 구축 되 고 다른 페이지 에 영향 을 주지 않 으 며 영향 을 최소 화 할 수 있 기 때 문 입 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.