개발노트/Kotlin
9주차 1일 팀프로젝트-xml과 drawableResource 그리고 color
시계속세상은아직돌아가는중
2023. 9. 4. 20:16
private fun createStrokeText(text: String): SpannableString {
val spannable = SpannableString(text)
val blueColor = Color.BLUE
val outlineSpan = object : CharacterStyle(), UpdateAppearance {
override fun updateDrawState(paint: TextPaint) {
paint.strokeWidth = 2f
paint.style = Paint.Style.STROKE
paint.strokeJoin = Paint.Join.ROUND
paint.strokeMiter = 10f
paint.color = blueColor
}
}
spannable.setSpan(outlineSpan, 0, text.length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
return spannable
}
해당 코드는 string을 테두리를 만들어주는 코드로, 겹치지 않으며 단 하나의 색만 지정이 가능하다.
따라서 첫 목표였던 파란 테두리에 노란 색으로 채워진 텍스트를 사용하는 것은 불가능하다.
이를 외부 라이브러리를 사용해서 구현할지는 현재 미지수.
오늘은 최대한 drawaresouce와 xml만을 사용해서 클릭 이벤트 등을 주는 것을 목표로 작업했다.
// tab_background_click
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#6BB86E" />
</shape>
//tab_background_unclick
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
</shape>
//tab_background
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/tab_background_selected"
android:state_selected="true" />
<item android:drawable="@drawable/tab_background_unselected"
android:state_focused="false"
android:state_pressed="false"
android:state_selected="false" />
</selector>
탭 레이아웃이 클릭 되었는지 안되었는지의 상태도 state_selcted로 판단이 가능하다.
//tab_text_color
selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#FFFFFF" android:state_selected="true" />
<item android:color="#000000" />
</selector>
같은 이치로 res/color파일을 만들어서 색 지정도 가능하다!