TextView 특정문자열 색깔넣기(setSpan, html)
TextView 특정문자열 색깔넣기
(setSpan, html)
ㆍ 이번글에서는 TextView 안에 있는 문자열중에
원하는 문자열만 색깔을 넣거나 바꾸는 방법에
대해 알아보도록 하겠습니다.
ㆍ 가장 대중적인 방법인 setSpan과 그 다음 html을
이용하는 방법정도 써보겠습니다.
이번글에서
만들어 볼 화면입니다
일반적으로
하나의 TextView에
담겨있는 문자열은
따로따로 컨트롤
할 수 없습니다.
그러나 위에
일반적이라고 적은이유는
다른 방법을 사용하면
바꿀 수 있는 방법이
얼마든지 있습니다.
setSpan
첫번째 방법은
어느정도 많이들
알고 있는
setSpan입니다
setSpan은
SpannableStringBuilder
클래스에서 사용가능한
메서드입니다
특정 Text의
색깔, 밑줄, 링크 등
다양한 변화를
줄 수 있습니다.
이번에는 간단히
위에 결과화면대로
색깔 바꾸는 정도만
해보겠습니다.
1단계
SpannableStringBuilder를
생성하고 원하는 문자열을
담는다
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str = "안녕하세요 여기라는 글자를 보라색으로 바꿔보겠습니다";
TextView tv = (TextView)findViewById(R.id.tv);
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
}
}
2단계
특정 Text를 변경시켜주기
위해서 setSpan 처리를 한다
(블럭정도 잡는다 생각)
ssb.setSpan
색깔을 바꿔주기 위해서
ForegroundColorSpan을
사용한다
ssb.setSpan(new ForegroundcolorSpan(~
원하는 색깔과
위치를 잡아주면 완료!
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str = "안녕하세요 여기라는 글자를 보라색으로 바꿔보겠습니다";
TextView tv = (TextView)findViewById(R.id.tv);
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor("#5F00FF")), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ssb);
}
}
결과는 위와 같습니다
그래도 한번 색깔만
다른걸로 변경해보자면
언젠가 한번 쓸 지도 모르지만
다른 효과를 내기 위해서는
ForegroundColorSpan 대신
ClickableSpan, AbsoluteSizeSpan
등을 써주시면 됩니다!
HTML
.....
일단 HTML은
말 그대로
HTML 태그를
사용하는 방법입니다.
처음에 이걸 알았을때
머릿속으로 엄청나게
신기하면서도 많은걸
해봐야지 생각했지만..
조금 사용하다보니
기대했던것보다는 실망?
했던...
왜냐하면 모든 태그를
지원하지 않고
기본적인 태그만 제공됩니다
제 기억에 문서를 봤을때
Not all HTML tags
라는 글씨가.. 지워지지
않는군요..
하지만
이번글에서는
글자색이라는
HTML에서 보면
아주 아주 아주
기초적인 부분이죠
말이 너무 길었네요..
처음 사용하던때가 생각나서.
바로 사용방법을
알아보면
일단 간단합니다
TextView.setText안에
Html.fromHtml이라고
적으면 됩니다.
그 후에
"<tag>안뇽</tag>"
이런식으로 넣으면
전부 적용됩니다
맨 위
결과화면을
만들기 위해서는
방법이 여러가지 있겠지만
위에서처럼 Text를 어디서
받아오는게 아니라고 가정한다면
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String strFront = "안녕하세요 ";
String strChange = "<font color=\"#5F00FF\">여기라는</font>";
String strBack = " 글자를 보라색으로 바꿔보겠습니다";
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText(Html.fromHtml(strFront + strChange + strBack));
}
}
이렇게 원하는 부분만
HTML 태그를 이용해서
바꿔줄 수 있습니다.
상황이 어떻게
될 지 모르나
String 처리 메서드를
사용해서 나타내도 됩니다.
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str = "안녕하세요 여기라는 글자를 보라색으로 바꿔보겠습니다";
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText(Html.fromHtml(str.substring(0,6)
+ "<font color=\"#5F00FF\">"
+ str.substring(str.indexOf("여기라는"),str.indexOf("여기라는")
+"여기라는".length())+"</font>"
+ str.substring(str.indexOf(" 글자를 보라색으로 바꿔보겠습니다"))));
}
}
위치를 찾아서
3군대로 나눠서 찍어줬습니다
(어쨋든 위랑 똑같음..)
끝!
'안드로이드(android) > 위젯(Widget)' 카테고리의 다른 글
TextView, Button 등등 Focus 주기 (0) | 2016.11.22 |
---|---|
Switch(스위치) 커스텀해서 사용하기 (2) | 2016.10.27 |
EditText 키보드 다음, 완료버튼 등등 만들기(ImeOptions) (1) | 2016.06.13 |
EditText(에디트텍스트) 속성 모든것(1) (1) | 2016.05.28 |
Button 이벤트 (0) | 2016.03.24 |