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

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)

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



답변

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

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

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


답변

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/ 에서 읽을 수 있습니다.


답변

dp 대신 sdp (확장 가능한 desnsity 픽셀) https://github.com/intuit/sdp 를 사용하면 생명을 확실히 구할 수 있습니다.


답변