• 안드로이드 스튜디오 TextView 글자 중간 글씨크기, 색깔 바꾸기

    2021. 7. 30.

    by. 하루플스토리

    반응형

     

    안녕하세요, 하루플입니다.

     

    TextView에서 글자 크기나 색깔을 변경할때 일반적으로 아래와 같은 방법을 사용했습니다.

    android:textSize="25dp"
    android:textColor="#2b5d5b"

    하지만 이렇게 하면 글자 전체의 색상이 변경됩니다.

     

    글자 중간의 색상을 변경할 땐 어떻게 해야할까요?

    저는 이 방법을 알기 전까지는 LinearLayout에서 horizontal 속성을 하나 추가하여 만들었었는데 XML 코드가 무지막지하게 길어지고 가독성도 떨어지는 문제가 생겼습니다..

     

    결국 글자 중간에도 원하는 옵션을 설정할 수 있는 방법을 찾아보았는데요

    1. SpannableString 객체 생성.
    2. TextView의 글자에서 특정 문자열의 시작 위치와 끝 위치 얻기.
    3. spannableString의 속성 지정
    4. 색이나 크기가 바뀐 spannableString을 TextView에 넣어주기

    여기서 '원하는 기능' 이라는 글자만 색을 바꿔보겠습니다.

     

     

     

    1. SpannableString 객체 생성.

    먼저 TextView에 변수를 지정해줍니다.

    <TextView
                android:id="@+id/function_text"
                android:text="원하는 기능을 선택해주세요"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textSize="25dp"
                android:fontFamily="@font/maruburi_regular"
                android:gravity="center"
                />

    저는 function_text 라는 변수명으로 사용하겠습니다.

     

    java로 오셔서 onCreate 내부에 아래와 같이 작성합니다. 변수명은 본인의 것으로 작성하시기 바랍니다.

            TextView function_text = (TextView)findViewById(R.id.function_text); //텍스트 변수 선언
    
            String content = function_text.getText().toString(); //텍스트 가져옴.
            SpannableString spannableString = new SpannableString(content); //객체 생성

     

     

     

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

            String word ="원하는 기능";
            int start = content.indexOf(word);
            int end = start + word.length();

    여기서 content 는 방금 위에서 작성한 TextView 문자열이다.

     

     

     

    3. spannableString의 속성 지정

    spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#2b5d5b")), 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배)

     

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

    function_text.setText(spannableString);

     

    결과를 확인해보시면 원하는 부분의 글자만 바뀐것을 볼 수 있습니다

    글자 속성 조금 바꾸는 것도 꽤나 시간이 드는 일이네요!

     

     

    다른 궁금한 점 있으신 분들은 댓글로 질문 부탁드립니다.

     

    참고 사이트 [https://dev-imaec.tistory.com/26]

    반응형

    댓글