개발노트/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파일을 만들어서 색 지정도 가능하다!