안드로이드/불명예의 전당

[fragment] view_background_color 바꿔보기.

란서 2021. 5. 24. 18:46
  • 왜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'
}