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

조회수 1801회

제가 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에서 동작하는 다른 함수가 있을까요?

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부터 지원해도 문제가 없지 않을까라는 개인적인 견해입니다.

    그래프 출처

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)