- 왜why? 엑비티비티에 뷰 페이져가 있고, 그 뷰페이져에 생성된 fragment내 view의 색상을 바꾸고 싶어서.
- 사용.
<!--바꾸려고 하는 view 의 색 in fragment.xml--> <LinearLayout android:id="@+id/currAlcohol" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@color/black" android:orientation="vertical"> ...\ ///////////////////////////// // fragment class // ///////////////////////////// //fragment class fun changeLeaderBoardColor(view: View, idx: Int) { when (idx) { 0 -> { view.currAlcohol?.setBackgroundColor( ContextCompat.getColor( view.context, R.color.soju ) ) view.maxAlcohol?.background = ContextCompat.getDrawable(view.context, R.drawable.border_line) } 1 -> { view.currAlcohol?.setBackgroundColor( ContextCompat.getColor( view.context, R.color.beer ) ) view.maxAlcohol?.background = ContextCompat.getDrawable(view.context, R.drawable.border_line_beer) } } }
-view.maxAlcohol?.setBackgroundColor(color: Int)를 사용하였고, 해당 메서드의 인자로는 Int자료형이 들어간다.
결국 이 인자에 설정하고 싶은 color를 지정해줘야 하는데 나는 res/color 파일에 색을 미리 설정해두었다.
- R.color.색 에 해당하는 color값을 int로 치환하려면 ContextCompat.getColor(context: Context, id: Int ) 함수가 필요하다.
1.context자리에는 해당 fragment의 context를 넘겨준다 -> view.context
2.id자리에는 R.color.[name] 을 넘겨준다 -> R.color.soju
따라서
view.currAlcohol?.setBackgroundColor(ContextCompat.getColor(view.context,R.color.beer))
다음과 같은 코드를 통해 fragment내 view의 background color를 조정해줄 수 있었다.
*참고
-fragment.xml에서 LinearLayout의 background를 변경하고 싶음.
-fragment class는 액티비티에서 fragment를 생성할 때 idx를 인자로 넘겨주는데
해당 idx에 따라 view의 색이 변하는 코드이다.
-view.maxAlcohol은 LinearLayout의 view의 이름이다.
-gradle내 플러그인 상황.
plugins {
...
id 'kotlin-android-extensions'
}