TextView
Java 코드를 사용하여 특정 텍스트 크기를 변경하기 위해 정수 값을 할당하면 값이 픽셀 ( px
) 로 해석됩니다 .
이제 누구나 그것을 할당하는 방법을 알고 sp
있습니까?
답변
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
예:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
답변
속성DisplayMetrics
을 사용하여 객체를 사용하여 픽셀과 크기 조정 된 픽셀 간을 변환 할 수 있습니다 .scaledDensity
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
답변
보다 깨끗하고 재사용 가능한 접근 방식은
디렉토리 dimens.xml
안의 파일 에서 텍스트 크기를 정의하십시오 res/values/
.
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
그런 다음에 적용하십시오 TextView
.
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
답변
소스 코드를 기반으로 setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
픽셀에 대한 디멘션을 계산하기 위해이 기능을 작성합니다.
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
단위는 다음과 같습니다 TypedValue.COMPLEX_UNIT_SP
.
답변
기본적으로 setTextSize, 단위가없는 SP (픽셀 크기 조정)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
답변
@John Leehey와 @PeterH에게 감사드립니다 :
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
dimen.xml에서 R.dimen.desired_sp를 25로 정의하면 문제가 발생합니다.
- 비 HD 장치에서 : desiredSp는 여전히 25, 밀도 = 1
- HD 기기 (예 : Nexus 7 2 세대) : desiredSp가 50 ish, 밀도 = 2
답변
허용 된 답변이 작동하지 않는 경우 (예 : 페인트를 처리 할 때) 다음을 사용할 수 있습니다.
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);