java 코드를 사용하여 sp 값으로 텍스트 크기를 할당하는 방법
특정 텍스트 크기를 변경하기 위해 정수 값을 할당하는 경우TextView
자바 코드를 사용하여, 값은 픽셀(pixel)로 해석됩니다.px
).
이제 그걸 어떻게 할당하는지 아는 사람이 있습니까?sp
?
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
예:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
보다 깨끗하고 재사용 가능한 접근 방식은
텍스트 크기 정의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));
객체를 사용하여 속성이 있는 픽셀과 스케일링된 픽셀 간의 변환을 도울 수 있습니다.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
의 소스 코드를 기준으로 합니다.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
.
승인된 답변이 작동하지 않을 때(예: 페인트를 다룰 때) 다음을 사용할 수 있습니다.
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
기본적으로 setTextSize, 단위가 없는 경우 SP(scale pixel)에서 작동합니다.
public void setTextSize (float size)
API 레벨 1에서 추가 기본 텍스트 크기를 "스케일링된 픽셀" 단위로 해석되는 주어진 값으로 설정합니다.이 크기는 현재 밀도 및 사용자 글꼴 크기 기본 설정에 따라 조정됩니다.
고마워요 @John Leehey 와 @PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
문제는 R.dimen.desired_sp를 dimen.xml에 25로 정의하는 경우입니다.
- 비HD 장치의 경우: 원하는 Sp는 여전히 25, 밀도 = 1입니다.
- HD 장치의 경우(Nexus 7 2세대와 같이): 원하는 Sp는 50ish, 밀도 = 2
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
PX를 SP로 변환하기 위한 코드입니다.100% 작업
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
API 레벨 1부터 메소드를 사용할 수 있습니다.
설명서에서:
기본 텍스트 크기를 "스케일링된 픽셀" 단위로 해석되는 지정된 값으로 설정합니다.이 크기는 현재 밀도 및 사용자 글꼴 크기 기본 설정에 따라 조정됩니다.
매개 변수: 크기 -> float:크기가 조정된 픽셀 크기입니다.
간단하게 다음을 수행할 수 있습니다.
textView.setTextSize(12); // your size in sp
인코틀린 'androidx.core:core-ktx:1.10.0'
, 이 방법은 유용합니다.
import android.util.TypedValue
.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12F)
여기 12F = 12sp
모든 솔루션을 사용해 보았지만 아무 것도 허용할 만한 결과를 제공하지 못했고(기본 글꼴이 매우 큰 장치에서 작업했기 때문인지), 다음과 같은 작업이 가능했습니다(COMPLEX_UNIT_DIP = Device Independent Pixels).
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
언급URL : https://stackoverflow.com/questions/2069810/how-to-assign-text-size-in-sp-value-using-java-code
'programing' 카테고리의 다른 글
MySQL 쿼리에서 세미콜론을 생략하는 것이 나쁜가요? (0) | 2023.09.19 |
---|---|
ORA-01408: 해당 열 목록은 이미 색인화되어 있습니다. (0) | 2023.09.19 |
kvm: 모듈 확인 실패: 서명 및/또는 필요한 키 누락 - 커널 수정 (0) | 2023.09.19 |
XPath와 링크 텍스트로 링크 URL을 찾으려면 어떻게 해야 합니까? (0) | 2023.09.19 |
대체 for-loop 구문 (0) | 2023.09.19 |