안드로이드 api level 14에서 textView 속성 가져오기


제가 staticLayout을 사용하고있는데요

new StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad)

다음과 같이 view의 속성들을 넘겨줘야합니다. 문제시 되는 부분이

spacingmult, spacingadd, includepad 입니다.

이 변수들은 다음과 같은 함수로 가져왔었는데요

getLineSpacingMultiplier(); getLineSpacingExtra(); getIncludeFontPadding();

이 함수들은 api 16부터 지원인데 min api level 기준을 14로 잡으면서 위의 함수를 못쓰게 되었습니다

위의 함수를 대체할 api 14에서 동작하는 다른 함수가 있을까요?

  • 2016년 07월 13일에 작성됨

조회수 194


1 답변


좋아요
1
싫어요
채택취소하기

언급하신 TextVew의 다음 함수들은 API 16부터 지원하기 때문에 하위 버전에서는 사용할 수 없습니다.

getLineSpacingMultiplier(); 
getLineSpacingExtra(); 
getIncludeFontPadding();

상황에 따라서 세가지 대안을 적용해 볼 수 있을 것 같습니다.

1.

TextView의 위 설정이 런타임에 변경되지 않는다면 디폴트 값을 사용할 수 있습니다. 안드로으드 4.0의 TextView.java에 해당 값이 다음과 같이 초기화 되어있는 것을 확인할 수 있습니다.

private float mSpacingMult = 1.0f;
private float mSpacingAdd = 0.0f;
private boolean mIncludePad = true;

따라서 StaticLayout을 생성할 때 아래와 같이 값을 넘길 수 있습니다.

new StaticLayout(source, paint, width, align, 1.0f, 0.0f, true);

2.

위 값이 런타임에 변경된다면 API 16 미만에서는 리플렉션을 통해서 값을 읽어올 수 있습니다. 리플렉션으로 특정 필드를 읽어오는 내용은 링크로 대체했습니다. (구글링 하시면 더 많은 정보를 찾을 수 있습니다.)

3.

이미지

해법과는 조금 거리가 있는 이야기일 수 있습니다만 안드로이드 생태계에서 API 16, 즉 아이스크림 샌드위치 미만의 점유율은 4%에 불과합니다. (아이스크림 샌드위치만 놓고보면 1.9%) 하위 버전을 지원해야 하는 상황이 아니라면 API 16부터 지원해도 문제가 없지 않을까라는 개인적인 견해입니다.

그래프 출처


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close