안드로이드 코드상에서 TextView 문자의 범위를 지정해 색상, 크기, 스타일을 변경하는 SpannableStringBuilder, view binding

임현주·2021년 12월 20일
0
post-thumbnail

시작

혼자 공부하면서 정리하고 싶은 부분을 작성한 글입니다 👀
함께 공부하는 사람에게는 도움이 되었으면 좋겠고,
혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다 💌


🔹 SpannableStringBuilder

코드상에서 TextView 문자의 일부의 색, 크기, 스타일을 변경할 수 있다.

    val ssb = SpannableStringBuilder(binding.testTextView.text)
    ssb.setSpan(
        // 적용하고자 하는 효과가 무엇인지 지정
        ForegroundColorSpan(getColor(R.color.green)),
        // 효과를 주고자 하는 위치의 시작점
        binding.testTextView.text.length - 1,
        // 효과를 주고자 하는 위치의 끝점
        binding.testTextView.text.length,
        // Span의 포인트 또는 마크에 대한 제어를 위한 플래그를 지정
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    )

    binding.testTextView.text = ssb

플래그 속성 : INCLUSIVE(확장), EXCLUSIVE(단절)
🔽 예시 🔽
SPAN_INCLUSIVE_EXCLUSIVE : 앞부분에 확장성을 열어두고, 뒷부분에는 확장을 사용하지 않겠다
SPAN_EXCLUSIVE_INCLUSIVE : 앞부분은 확장을 하지 않고, 뒷부분에 확장성을 열겠다


🔹 view binding

지금까지 나는 액티비티에서 뷰의 값을 변경하려면 findViewId를 통해 매번 연결 작업을 해주었다. 뷰가 많을수록 해당 코드가 지저분해져서 속상했었다😭 하지만 이제는 view binding을 통해 findViewId를 대체해보려 한다.

먼저 build.gradle 파일에 view binding을 사용한다고 선언해주어야한다.

android {
        ...
        viewBinding {
            enabled = true
        }
    }

위의 설정을 마치면 각 XML 레이아웃 파일의 결합 클래스가 생성된다. 결합 클래스의 이름은 XML 파일의 이름을 카멜 표기법으로 변환하고 끝에 'Binding'을 추가하여 생성된다. 그리고 이를 적용할 activity의 onCreate()에 선언해주면 된다.

🙋🏻‍♀️ 예시.
activity_main > ActivityMainBinding
activity_detail > ActivityDetailBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 메인 액티비티 -> 액티비티 메인 바인딩
        // 자동으로 완성된 액티비티 메인 바인딩 클래스 인스턴스를 가져왔다.
        binding = ActivityMainBinding.inflate(layoutInflater)
        // 뷰 바인딩과 연결
        // 모든 결합 클래스에는 상응하는 레이아웃 파일의 루트 뷰에 관한 직접 참조
        setContentView(binding.root)
        
        binding.nameTextView.text = "토끼"
   }
}
profile
🐰 피드백은 언제나 환영합니다

0개의 댓글