ABOUT ME

dddd-

Today
-
Yesterday
-
Total
-
  • [TextView] 안드로이드 TextView의 모든 것 3 - 특정 문자열 속성 바꾸기
    Android/개발 2018. 11. 12. 20:05


    안드로이드 텍스트뷰의 모든것 3

    특정 문자열 색상, 크기, 스타일 등 바꾸기







     TextView를 사용하다보면 글자 색이나 크기 등을 바꿔야 할 때가 있습니다. 기본적으로 TextView의 글자 색을 바꾸고 싶을 때는 기본 속성인 textColor를, 글자 크기를 바꾸고 싶을때는 textSize를 이용하면 되죠. 하지만 기본속성을 이용하면 TextView의 전체 글자의 색상이나 크기가 변경됩니다.


     그래서 TextView의 글자 중 특정 문자열의 색상이나 크기, 스타일 등을 바꾸려면 SpannableString 클래스를 사용합니다. SpannableString 클래스를 사용하는 것 간단하게 4단계면 됩니다.


    1. SpannableString 객체(spannableString)생성

    2. TextView의 글자에서 특정 문자열의 시작 위치와 끝 위치 얻어오기

    3. spannableString의 속성 지정

    4. 색이나 크기가 바뀐 spannableString을 TextView에 넣어주기





    1. SpannableString 객체 생성


    String content = textView.getText().toString();
    SpannableString spannableString = new SpannableString(content);


    - TextView의 글자를 가져와서 spannableString 객체를 만들어줍니다.





    2. 특정 문자열의 시작 위치와 끝 위치 얻어오기


    String word = "안드로이드";
    int start = content.indexOf(word);
    int end = start + word.length();


    - String의 indexOf 함수를 이용해서 특정 문자열의 시작 위치를 얻어옵니다.

    - 시작위치에서 특정 문자열의 길이만큼을 더해 끝 위치를 얻어옵니다.

    - 여기서 content는 TextView의 글자입니다.






    3. SpannableString 속성 지정(색상, 크기, 스타일 등 바꾸기)


    spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF6702")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new RelativeSizeSpan(1.3f), start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);


    - setSpan(속성, 시작 위치, 끝 위치, 플래그)

      // 플래그 값이 어떤 역할인지는 정확히는 모르겠습니다.. 아시는 분이 있으시다면 댓글 남겨주시면 감사하겠습니다^^

    - 첫 번째 줄의 ForegroundColorSpan은 글자의 색상을 지정해줍니다. (BackgroundColorSpan 속성은 배경색을 지정)

    - 두 번째 줄의 StyleSpan은 글자의 스타일을 지정해줍니다. (BOLD, ITALIC 등)

    - 세 번째 줄의 RelativeSizeSpan은 글자의 상대적 크기를 지정해줍니다. (1.3f는 1.3배)

      // AbsoluteSizeSpan을 사용하시면 절대적 크기를 지정해줍니다.

    - 그 외에도 아래 이미지처럼 많은 속성이 있습니다.






    4. 만들어진 spannableString을 TextView에 넣어주기


    textView.setText(spannableString);


    - 이렇게 간단하게 특정 문자열의 속성을 바꿀 수 있습니다.






    전체소스


    package com.imaec.forblog;

    import android.graphics.Color;
    import android.graphics.Typeface;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Spannable;
    import android.text.SpannableString;
    import android.text.style.ForegroundColorSpan;
    import android.text.style.RelativeSizeSpan;
    import android.text.style.StyleSpan;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textView = findViewById(R.id.textView);
    // 1
    String content = textView.getText().toString();
    SpannableString spannableString = new SpannableString(content);

    // 2
    String word = "안드로이드";
    int start = content.indexOf(word);
    int end = start + word.length();

    // 3
    spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF6702")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new RelativeSizeSpan(1.3f), start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);

    // 4
    textView.setText(spannableString);
    }
    }


    - 결과



    - 전체 문자열에서 '안드로이드'의 색상과 크기, 두께가 달라진걸 보실 수 있습니다.

    이렇게 간단하게 특정 문자열의 색상, 크기, 스타일 등을 변경하는 방법을 알아봤습니다! 위의 방법을 쓰면 첫 번째 특정 문자열만 속성이 적용되게 되는데 모든 특정 문자열의 속성을 적용시키는 방법은 setSpan 함수를 for문으로 돌리면 됩니다! 자세한 방법이 궁금하면 댓글로 남겨주세요^^


     그럼 모두 열코하세요!


    안드로이드 TextView의 모든 것 1 - 기초편 보러가기

    안드로이드 TextView의 모든 것 2 - TextView 모서리 둥글게해서 버튼만들기 보러가기




    댓글

Designed by Tistory.