XML에서 차원 가져 오기 및 런타임에서 텍스트 크기 설정


101

dimens.xml에는 다음이 있습니다.

<dimen name="text_medium">18sp</dimen>

런타임에서이 값을 얻고 텍스트보기의 텍스트 크기를 설정합니다.

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

10 인치 태블릿 (1280 x 800)에서는 모든 것이 정상입니다. 그러나 전화 (800 x 480)에서는 텍스트보기에 매우 큰 글꼴이 있습니다. 태블릿에서 크기는 18입니다. 전화로는 27 세입니다.

다음과 같이 수동으로 크기를 설정하는 경우 :

textView.setTextSize(size)

크기는 두 장치 모두에서 정상입니다.

답변:


297
<dimen name="text_medium">18sp</dimen>

코드에서 크기를 설정하십시오.

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
나는 OP에 대해 모르지만 이것이 내가 찾고 있던 대답이었습니다. COMPLEX_UNIT_DP를 사용하고 있었는데 출력 유형이 아닌 입력 유형을 지정해야한다고 생각했습니다.
HenryAdamsJr

내 글꼴 크기 (sp에 정의 됨)를 얻을 때 60을 얻습니다. OMPLEX_UNIT_PX로 다시 설정하고 다시 검색하면 70을 얻습니다. 여기에서 모든 것이 명확하지 않은 것 같습니다
Gleichmut

2
텍스트 크기의 경우 TypedValue.COMPLEX_UNIT_SP대신 사용할 수없는 이유는 무엇입니까?
dphans

3
@dphans이 Resources.getDimension()메서드는 이미 적절한 메트릭을 곱한 값을 반환합니다
pkuszewski

2
@pkuszewski 와우, 너무 헷갈리네요.
Big_Chair

4

getDimensionPixelSize () 및 getDimension () 두 메서드 모두 화면 밀도를 사용하여 픽셀을 계산합니다. 전화기 화면 밀도는 분명히 hdpi (240dpi)이므로 1.5 스케일을 사용하여 dp를 sp로 변환합니다. 간단한 수학 18 * 1.5 = 27.

태블릿 밀도는 mdpi (160dpi)이므로 배율은 1 : 1에 불과합니다.

그러나 두 텍스트의 실제 크기를 비교하면 동일해야합니다.

가장 좋은 방법은 전화의 경우 값 폴더에 하나, 태블릿의 경우 values-sw600dp에 두 개의 dimens.xml 파일을 만드는 것입니다 (value-sw720dp-land 폴더를 사용하여 가로 방향으로 10 인치 태블릿의 크기를 저장할 수도 있습니다).

Android의 치수에 대한 자세한 내용은 http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/ 에서 읽을 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.