응용 프로그램에서 자체 텍스트 크기를 지정하고 싶지만이 작업을 수행하는 데 문제가 있습니다.
장치 설정에서 글꼴 크기를 변경하면 응용 프로그램의 글꼴 크기 TextView
도 변경됩니다.
응용 프로그램에서 자체 텍스트 크기를 지정하고 싶지만이 작업을 수행하는 데 문제가 있습니다.
장치 설정에서 글꼴 크기를 변경하면 응용 프로그램의 글꼴 크기 TextView
도 변경됩니다.
답변:
실제로 설정 글꼴 크기는의 크기에만 영향을줍니다 sp
. 정의 - 모든 그래서 당신은 할 필요가 textSize
있는 dp
대신에 sp
, 다음 설정 앱에서 텍스트 크기를 변경하지 않습니다.
여기에 문서에 대한 링크는 다음과 같습니다 치수
그러나 예상되는 동작은 모든 앱의 글꼴이 사용자의 기본 설정을 존중한다는 것입니다. 사용자가 글꼴 크기를 조정하고 싶은 이유는 여러 가지가 있으며 그 중 일부는 시각 장애가있는 의료 사용자 일 수도 있습니다. 텍스트 dp
대신에 사용하면 sp
일부 앱 사용자를 기꺼이 차별 할 수 있습니다.
즉 :
android:textSize="32dp"
sp
, 언제 사용해야하는지에 대한 규칙이 있는지 알고 싶었습니다 dp
. 여기에 정말 좋은 답변이 있습니다 : stackoverflow.com/questions/11638691/…
가장 쉬운 방법은 다음과 같은 것을 사용하는 것입니다.
android:textSize="32sp"
textSize
속성 에 대한 자세한 내용을 보려면 Android 개발자 설명서를 확인하십시오 .
dimension
리소스를 사용하는 것처럼 리소스 유형을 사용하십시오 string
( DOCS ).
당신의에서 dimens.xml
파일, 당신의 치수 변수를 선언 :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
그런 다음이 값을 다음과 같이 사용할 수 있습니다.
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
dimens.xml
다른 유형의 화면에 대해 다른 파일을 선언 할 수 있습니다 . 이렇게하면 다른 기기에서 원하는 앱 모양을 보장 할 수 있습니다.
지정하지 않으면 android:textSize
시스템이 기본값을 사용합니다.
전체 앱이 시스템 글꼴 크기에 영향을받지 않도록하는 간단한 방법은 기본 활동을 사용하여 구성을 업데이트하는 것입니다.
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
도움이 될 수 있습니다. 사용자 정의 응용 프로그램 또는 BaseActivity에 코드를 추가하십시오.
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
그러나 Resource # updateConfiguration은 API 레벨 25에 중복되어 향후 언젠가 지원되지 않습니다.
사용 된 단위가 DP가 아닌 SP이고 시스템 글꼴 크기 조정을 재정의하려는 경우 작업에서 한 가지 방법 만 재정의 하면됩니다 (이 게시물 참조) .
resources.updateConfiguration 은 더 이상 사용되지 않으며 버그가 있습니다 (Oreo에서는 형식이 지정된 텍스트에 문제가 있음).
안드로이드 8 에서이 솔루션은 저에게 효과적입니다.
기본 활동에이 코드를 추가
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}