3. setText를 써보자(2)

Posted by ITPangPang
2017. 11. 25. 14:38 파고들기/TextView




setText를 써보자




ㆍ 지난글에 이어서 setText 사용방법 나머지 4가지에 대해

    알아보겠습니다







1. setText(int resid)


2. setText(CharSequence text)


3. setText(CharSequence text, TextView.BufferType type)


4. setText(int resid, TextView.BufferType type)


5. setText(char[] text, int start, int len)


지난글에서 첫번째 방법을 알아봤으니

이번에는 나머지 2~5번

사용방법에 대해 알아보겠습니다.



setText(CharSequence text)


setText를 사용하는

두번째 방법은 인자값으로

CharSequence를 넣는 방법입니다.


일단 복잡하게 생각하기 싫으신분들은

CharSequence는 String하고 99% 똑같다고

생각하고 넘어가시면 됩니다.


실제로도 특별한 경우를 제외한다면

CharSequence에 대해 잘 몰라도

코딩하는데에는 아무 지장없습니다



그래도 혹시 궁금하실수 있으니

CharSequence에 대해 간단하게만 알아보겠습니다.



1. CharSequence는 Interface 입니다.


그렇기에 new 연산자로 인스턴스 생성이

불가능합니다.



2. String vs CharSequence


String은 CharSequence를

implements한 Class입니다.


그렇기에 CharSequence는 String의

상위타입이라고 생각하면 됩니다.


이를 확인하기 위해서는

업,다운 캐스팅을 해보면 알 수 있습니다.


CharSequence가 String의 상위타입이기때문에

String을 CharSequence로 변환할때 손실없이

변환가능합니다.



자세한 설명은 생략하고

setText를 사용하는 입장에서 차이점을

보자면


CharSequence는 마크업문자로 변형가능

String은 마크업문자로 변형불가능



이게 무슨말인지는

코드를 보면 쉽게 이해가능합니다.


리소스에 위와 같이

마크업언어인 HTML코드를 넣었습니다

<font~></font>

(글씨색깔을 빨간색으로 바꾸라는 태그입니다)


그리고 코드에서 가져와서

setText를 해보겠습니다.


getText 메서드는 리턴값으로

CharSequence을 뱉어내고,


getString 메서드는 리턴값으로

String을 뱉어냅니다.



그렇기에

String 변수는 getText() 메서드를 통해서

텍스트를 가져올 수 없습니다.


이제 위의 코드를 빌드해서

실행시켜보겠습니다.



결과를 보면

리소스를 String 타입으로 받아서 setText한

TextView는 font color가 적용이 안된 모습이고


CharSequence로 받아서 setText한

TextView는 font color가 적용되서 빨간글씨로

출력되는 것을 확인 할 수 있습니다.




3. 위와 같이 특별한 상황이

아니라면 그냥 똑같다고 보면 된다.






다시

setText(CharSequence text)로 돌아가서


왜 특별한 경우가 아니라면

String하고 똑같다고

생각하고 사용해도 된다라고

글을 적었냐면



CharSequence의 존재를 모르더라도

위와 같이 기존처럼 String 값을 넣어서 쓰게 되면

빌드될때 위 Hello, Android라는 텍스트가

CharSequence로 인식되어 실행되기 때문에

사용하는데 아무런 이상이 없습니다.



setText(CharSequence text, TextView.BufferType type)

setText(int resid, TextView.BufferType type)


사용방법 3, 4번은 묶어서 알아보겠습니다.


첫번째 인자로 들어가는 Text는 기존이랑 똑같습니다.

setText("aaa") 또는 setText(R.string~);



달라지는건

두번째 들어가는 인자로 들어가는 BufferType 입니다.


두번째 인자로 들어갈수 있는

BufferType의 종류는

아래와 같이 3가지가 있습니다.



첫번째

TextView.BufferType.NORMAL

(디폴트 상태입니다)

CharSequence로 리턴시킨다는 뜻입니다.



두번째

TextView.BufferType.SPANNABLE

Spannable로 리턴시킨다는 뜻입니다.


두번째는 아래와 같은 상황에서

사용합니다.


위의 코드는 TextView에

적혀있는 글자중에

index 3번째부터

index 5번째글자까지의

색깔을 바꾸는 코드입니다.


실행시켜보면 아래와 같습니다.



위에서 BufferType을 SPANNABLE이 아닌

NORMAL로 셋팅하거나, BufferType을 생략하게되면

에러가 발생합니다.



세번째

TextView.BufferType.EDITABLE

Editable and Spannable 형태로 리턴합니다.


세번째 타입으로 셋팅을 하면

위(두번째)에서 사용했던 코드 모두 사용가능하고,


추가로 TextView에서 텍스트를

가져와서 EditTable로 변환이 가능합니다.


코드를 보자면


위와 같이 BufferType이

NORMAL, SPANNABLE일때는

Editable editable = (Editable)~ 부분에서

에러가 발생하지만


BufferType을 EDITABLE로 설정해주면

에러 없이 사용가능 합니다.



setText(char[] text, int start, int len)


setText의 마지막 사용방법입니다.


첫번째 인자 : char타입 배열

두번째 인자 : char 배열에서 가져올 start index

세번째 인자 : char 배열에서 몇개의 char을 가져올 것인가



어렵지 않습니다.

위와 같이 코딩을 하게 되면


charArray에서 값을 가져옵니다.

charArray[0] 부터 char 배열의 길이만큼 가져옵니다


charArray[0] = 'a'이고

charArray.length = 5 이므로


abcde

와 같은 출력결과를 얻을 수 있습니다.


만약

textView.setText(charArray, 3, 1);

이라고 작성하게 되면

charArray[3] = 'd'

int len에 1을 넣었으므로


d

라는 출력결과를 얻을 수 있습니다.

'파고들기 > TextView' 카테고리의 다른 글

2. setText를 써보자(1)  (4) 2017.03.29
1. TextView 구조와 레퍼런스 보기  (0) 2017.03.28