혼자 공부하면서 정리하고 싶은 부분을 작성한 글입니다 👀
함께 공부하는 사람에게는 도움이 되었으면 좋겠고,
혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다 💌
코드상에서 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 : 앞부분은 확장을 하지 않고, 뒷부분에 확장성을 열겠다
지금까지 나는 액티비티에서 뷰의 값을 변경하려면 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 = "토끼"
}
}