밍쯔와 안작고 안귀여운 에러들🖤

[Android] material TabLayout - tabBackground를 동적으로(programmatically) 변경하기 본문

Develop/Android | iOS

[Android] material TabLayout - tabBackground를 동적으로(programmatically) 변경하기

밍쯔 2024. 1. 4. 10:51

 

이전 포스팅(아래 참고)을 보면 토글의 selected 된 영역을 둥글게 표현하는 것까지는 완성 시킬 수 있다!

근데 만약 A 탭과 B 탭 각각이 선택 됐을때, 색상을 달리 하고 싶다면?

 

이걸 설정하는데 꽤나 답답했던 것이,,,

app:tabBackground="@drawable/selector_btn_toggle_gray"

 

위의 방식으로 설정하던 방식으로 동적으로 변경하고 싶다,,! 에서 방법을 찾는데 문제를 겪었다.

binding.tabLayout.setBackground(...selector..) 로 변경이 안됐다는 것,,,,!

 

binding.tabLayout.setBackground(getResources().getDrawable(R.drawable.tab_color_selector));
binding.tabLayout.setBackgroundResource((R.drawable.tab_color_selector));
binding.tabLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_color_selector));
binding.tabLayout.setBackground(ContextCompat.getDrawable(this, R.drawable.tab_color_selector));

 

이건 시도를 해봤으나 도무지 먹히지 않았고,,, metarial 문서를 봐도 없었기에,,,,((내가 못찾은건가,,, 없었음,,ㅠ))

아무튼 해결 방법을 찾았습니다.

 

아래처럼 tab.view.setBackground를 쓰면 깔끼하게 해결됩니다.

binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if(tab.getPosition() == 0) {
    				...

					// 색상 변경 (Change Color of TabBackground)
                    binding.tabCardView.setStrokeColor(getColor(R.color.stroke_gray));
                    binding.tabLayout.setTabTextColors(getColor(R.color.stroke_gray), getColor(R.color.white));
                    tab.view.setBackground(getDrawable(R.drawable.selector_btn_toggle_gray));
                } else if (tab.getPosition() == 1){
                    ...

					// 색상 변경 (Change Color of TabBackground)
                    binding.tabCardView.setStrokeColor(getColor(R.color.theme_pink));
                    binding.tabLayout.setTabTextColors(getColor(R.color.theme_pink), getColor(R.color.white));
                    tab.view.setBackground(getDrawable(R.drawable.selector_btn_toggle_pink));
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });

 

ui 설정 파일이나 selector 등 상세한 코드는 이전 포스팅을 참고해주세요!

 

 

[ First Posting ]

https://mingz.tistory.com/109

 

[Android] 둥근 Toggle 커스텀 -> TabLayout 으로 !

토글 버튼을 제작해야 했는데 생각보다 돌고 돌았다..! 토글이라서 material의 toggleGroup만 생각했는데 생각보다 제약이 많았다. 왼쪽의 형태를 원했는데 material에서 적용하려면, 오른쪽 처럼 토글

mingz.tistory.com