๊ณณ๊ฐ์์ ์ธ์ฌ๋๋ค/์ค๋ฌด (20) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Android][Kotlin] ์ฌ์ฉ์๊ฐ ์ ํํ ํญ์ ๋ฌธ๊ตฌ์ ๋ณผ๋ ์ฒ๋ฆฌ ๊ธฐ๋ณธ Tab ๋ณผ๋ ์ฒ๋ฆฌ fun TabLayout.Tab.setBold() = this.view.children.find { it is TextView }?.let { tv -> (tv as TextView).post { tv.setTypeface(null, Typeface.BOLD) } } ๋ค๋ฅธ Typeface๋ก ๊ต์ฒด ๊ฐ๋ฅ https://developer.android.com/reference/android/graphics/Typeface#summary Typeface | Android Developers developer.android.com ์ ํ์ง๊ฐ 4๊ฐ์ง ๋ฐ์ ์๊ธฐ๋ ํ๋ค. ์ฌ์ฉ์๊ฐ ์ ํํ ํญ์ ๋ฌธ๊ตฌ ๋ณผ๋ ์ฒ๋ฆฌ fun TabLayout.setSelectedTabBold() = this.addOnTa.. [Kotlin] BaseUseCase abstract class UseCase where Type : Any { abstract suspend operator fun invoke(params: Params): Type? } [Android][Kotlin] ๋ฌธ๊ตฌ ๋ถ๋ถ ์ ๋ณ๊ฒฝ SpannedString ์ข ์ ํญ๋ชฉ ์ ์ธ build.gradle ์ implementation "androidx.core:core-ktx:$core_version" Utility fun String.targetColorSpan( emphasisString: String, @ColorInt colorRes: Int ): SpannedString { if(!this.contains(emphasisString)) return SpannedString(this) val splitStrings = this.split(emphasisString.toRegex()) return buildSpannedString { append(splitStrings[0]) color(colorRes) { append(emphasisString) } appe.. [Android ์ฝ์ง ๊ตํ] ์ด๋ชจ์ง ํ๋๋ฅผ ํ ๊ธ์๋ก ์ธ๊ธฐ ์ํด ์ปค์คํ InputFilter๋ฅผ ๋ง๋ค์์ด์. ์์ฝ ์๋๋ก์ด๋ ์ ๋ ฅ์ฐฝ์์ ์ด๋ชจ์ง ํ๋๋ฅผ ํ ๊ธ์๋ก ์ธ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์. ๊ทธ๋์ ์ด๋ชจ์ง ํ๋๋ฅผ ํ ๊ธ์๋ก ์ฌ๊ธฐ๊ณ ๊ธ์ ์๋ฅผ ์ธ๊ธฐ ์ํด์๋ ์์ ์ด ํ์ํฉ๋๋ค. ์ ๋ ์ปค์คํ InputFilter๋ฅผ ๋ง๋ค์์ด์. ๊ธฐํ์ ์ ๋ ฅ์ฐฝ์ ๊ธ์์ ์ ํ์ด ์์์ต๋๋ค. ์ผ๋ฐ ๊ธ์, ์ซ์, ๊ธฐํธ, ์ด๋ชจ์ง๋ฅผ ํฌํจํด์ ๊ธ์์ ์ ํ์ด ์์๊ณ , ๋น์ฐํ ์ง๊ด์ ์ผ๋ก ์ด๋ชจ์ง ํ๋๋ ํ ๊ธ์ ์๋๊ฒ ์ต๋๊น. ๋๋ฌด๋ ์ฝ๊ฒ ์๊ฐํ๊ณ ๊ธฐํ๋๋ก ์์ ํ๋ค๊ณ ์๊ฐํ๋๋ฐ, ํ ์คํธ๋ฅผ ํด๋ณด๋ ์ด๋ชจ์ง๋ฅผ ๊ธ์ ํ๋ ์ด์์ผ๋ก ์ธ๋๊ตฐ์.๐ณ ๋๊ฐ ์ ๊ฐ ํ ์คํธํ๋ ์ด๋ชจ์ง๋ค์ ํ ์ด๋ชจ์ง๋น 2๊ธ์ ์ ๋๋ก ์ธ์ํ์ต๋๋ค. iOS์์๋ ์ด๋ชจ์ง ํ๋๋ฅผ ํ ๊ธ์๋ก ์ธ์ํด์ ์ด๊ฒ๊ณผ ๊ด๋ จํด ๋ฌธ์ ๊ฐ ์์ด ์ฝ๊ฒ ๊ฐ๋๋ฐ, ์๋๋ก์ด๋๋ ๊ทธ๋ ์ง ๋ชปํด์ ์์ผ๋ก ํดํด๊ฑฐ๋ฆฌ๊ณ ๐คจ๐คจ์ ๊ทธ๋ฐ์ง,.. ์ด์ 1 2 3 ๋ค์