programing

코드 및 리소스에서 TextView 글꼴 크기를 설정할 때 불일치

nasanasas 2020. 11. 27. 08:11
반응형

코드 및 리소스에서 TextView 글꼴 크기를 설정할 때 불일치


공식 문서는 이 대답을하지 않는 것, 또는 나는 그것을 알아낼 수 없습니다.

요소 (는 신경 쓰지 마십시오. AlertDialogTextView에서도 발생합니다) :

TextView tv = (TextView) dialog.findViewById(android.R.id.message);

불일치. 사례 A :

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// or tv.setTextSize(14); does the same

사례 B :

tv.setTextSize(getResources().getDimension(R.dimen.text_size_small));
// TypedValue makes no difference either.

어디에 있습니까 values/dimens.xml?

<dimen name="text_size_small">14sp</dimen>

결과 : 글꼴 크기가 동일하지 않고 리소스에서 검색 할 때 훨씬 더 크게 나타납니다. 아마도 뭔가 빠졌을 것입니다. 그래서 내 실수는 무엇이며, 가장 중요한 것은 왜입니까?

- 첫 번째 답변 업데이트 -

고정 된 숫자는 코드에 고정 된 글꼴 크기를 하드 코딩하는 사람이 없기 때문에 단지 예일뿐입니다. 그래서 질문을 다시 말하겠습니다.

코드에서 리소스를 가져 오는 경우 XML 레이아웃에서 리소스를 가져올 때보 다 텍스트 크기가 더 큰 이유는 무엇입니까? 게다가 질문은 여전히 ​​동일합니다. 코드에서 14sp 단위를 검색하고 레이아웃 XML에 설정된 14sp 단위와 일관성을 유지하려면 어떻게해야합니까? 텍스트 크기에 대한 코드의 리소스에서 sp 단위를 사용하는 방법을 알려주지 않기 때문에 대답을 수락하지 않았습니다.

이 레이아웃에서는 치수가 동일하더라도 글꼴 크기가 다릅니다.

<TextView
            android:id="@+id/my_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/TextBody" />

styles.xml :

<style name="TextBody">
    <item name="android:textSize">@dimen/text_size_small</item>
    <item name="android:lineSpacingMultiplier">1.1</item>
    <item name="android:textColor">@color/body_text_1</item>
    <item name="android:textIsSelectable">true</item>
    <item name="android:linksClickable">true</item>
</style>

거기 text_size_small이 보이십니까? 이 경우 동일한 dimen리소스를 사용하여 글꼴 크기가 코드보다 작은 이유는 무엇 입니까?


메서드 setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);의 설명서에 내가 미리 계산 된 절대 px 값으로 이해하는를 getDimension반환한다고 나와 있기 때문에 사용해야 Resource dimension value multiplied by the appropriate metric.합니다.

즉, 다음을 사용하십시오.

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));

어떻게 든 이것이 맞는 것 같습니다.

XML :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="typo14">9sp</dimen>
</resources>

자바:

setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.typo14));

그것의 문제 sp px dpi

tv.setTextSize(14) = 14 pixels 

참고 URL : https://stackoverflow.com/questions/6784353/inconsistency-when-setting-textview-font-size-in-code-and-in-resources

반응형