2011-02-17 2 views
40

이것은 TextView의 확장입니다. getTextSize()setTextSize()은 무시되지 않습니다. 이러한 메서드는 확장하지 않습니다. 프로그래밍 1.6, API 레벨 4.Android TextView setTextSize가 텍스트 크기를 잘못 증가시킵니다.

이 코드의 루프는 반복 할 때마다 크기에 1.5를 곱합니다. 크기는 처음에 getTextSize에서 200을 읽는 경우, 다음 setTextSize(size)가 호출되고 다시 호출 getTextSize은 300

public void shrinkTest() { 
    float size = this.getTextSize(); 
    while (size > 8) { 
     this.setTextSize(size); 
     size = this.getTextSize(); 
    } 
} 

왜 이것이다 다시 읽어?

답변

141

허, 혼합 단위 문제. 반 직관에 어긋나는 것 같지만 쉽게 해결할 수 있습니다. setTextSize(float) 기본 메서드는 getTextSize() 메서드가 정확한 픽셀 크기를 반환하는 동안 sp 단위 (축소 된 픽셀)를 입력한다고 가정합니다.

당신과 같이, 대체 setTextSize(TypedValue, float)를 사용하여이 문제를 해결할 수 있습니다

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 

이 같은 단위와 협력하고 있는지 확인합니다. 아래와 같이하여 TypedValue 크기

19

setTextSize()getTextSize()은 다른 단위로 작동합니다. set() 매개 변수는 밀도에 영향을받지 않는 "크기 조정 된 픽셀"이지만 get()은 일반 오래된 픽셀을 반환합니다.

+2

펀치에 맞습니다. : P – kcoppock

+4

하아, 나만 일어난 생각! 좀 더 유용한 답변을위한 upvote가 ... –

3

통과 단위 :

TypedValue.COMPLEX_UNIT_PX // 픽셀

TypedValue.COMPLEX_UNIT_SP // 미늘 픽셀

TypedValue.COMPLEX_UNIT_DIP // 밀도 독립 화소

setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)