투케이2K

448. (kotlin/코틀린) [유틸 파일] getTextSubChangeString : 텍스트 부분 색상 , 굵기 , 폰트 변경 수행 - SpannableString 본문

Kotlin

448. (kotlin/코틀린) [유틸 파일] getTextSubChangeString : 텍스트 부분 색상 , 굵기 , 폰트 변경 수행 - SpannableString

투케이2K 2023. 12. 15. 15:39
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] getTextSubChangeString : 텍스트 부분 색상 , 굵기 , 폰트 변경 수행
        // -----------------------------------------------------------------------------------------
        fun getTextSubChangeString(mContext: Context, color: String, originText: String, subText: String): SpannableString? {

            /**
             * // -----------------------------------------
             * [getTextSubChangeString 메소드 설명]
             * // -----------------------------------------
             * 1. 텍스트 부분 색상 , 굵기 , 폰트 변경 수행
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * C_App.getTextSubChangeString(A_Intro@this, "#ff0000", "안녕 TWOK입니다", "TWOK")
             *
             * // -----------------------------------------
             */


            // [리턴 값 선언]
            var returnData: SpannableString? = null
            var M_LOG = ""


            // [로직 처리 실시]
            try {
                if (C_Util.stringNotNullMulti(arrayOf(originText, subText, color)) === true
                    && color.startsWith("#") == true) {

                    if (originText.contains(subText) == true) {

                        // [SpannableString 객체 생성]
                        returnData = SpannableString(originText)

                        // [변경하려는 문자열 인덱스 위치 확인]
                        val startIdx = originText.indexOf(subText)
                        val endIdx = startIdx + subText.length

                        // [SpannableString 속성 지정]
                        returnData.setSpan(ForegroundColorSpan(Color.parseColor(color)), startIdx, endIdx, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
                        returnData.setSpan(StyleSpan(Typeface.BOLD), startIdx, endIdx, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
                        returnData.setSpan(RelativeSizeSpan(1.3f), startIdx, endIdx, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE)
                        M_LOG = "[Success] :: Text Change"

                    } else {
                        M_LOG = "[Error] :: Sub Text Not Contains"
                    }

                } else {
                    M_LOG = "[Error] :: Input Data Is Null"
                }

            } catch (e: Exception) {
                M_LOG = "[Exception] :: " + e.message.toString()
                S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e)
            }


            // [로그 출력 실시]
            ///*
            // ===============================================================
            S_Log._D_("텍스트 부분 색상 , 굵기 , 폰트 변경 수행", arrayOf(
                "INPUT [color] :: $color",
                "INPUT [originText] :: $originText",
                "INPUT [subText] :: $subText",
                "M_LOG :: $M_LOG"
            ))
            // ===============================================================
            // */


            // [리턴 반환 실시]
            return returnData
        }

 

반응형
Comments