마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 색깔을 소스코드에서 바꾸려고 하는데요

0 추천
그냥 setbackgroundcolor 사용하니까

 

ㄱ기존 버튼에 적용된 것들이 다 날아가고 그냥 전체색만 텅 바뀌더라구요

 

떄문에 xml로 스타일을 여러개 만들어놓고 setBackgroundResource로 xml파일만 갈아끼워(?)주고 있는데

 

스타일마다 xml파일 하나씩 새로 만들어야 해서 엄청 번거롭네요..

 

눌렀을때 변할 색깔도 필요한데다가...

 

 

 

소스코드로 살짝 rgb값 건드리거나 해서 전체적인 색상 톤 변경하는 방법은 없는 건가요?
익명사용자 (5,930 포인트) 님이 2014년 9월 26일 질문

2개의 답변

+1 추천
 
채택된 답변
보통 저런 구현할때 Selector를 이용하는데요.

질문하신것 처럼 전체적인 색이 바뀌어 버리죠.

아이폰의 경우는 눌렀을때 효과도 지원해주는것 같던데. 안드로이드도 그런 효과를 지원해줬음 좋겠어요.

물론 알파값을 준 다른 이미지를 위에 덮고 쓴다던가 하면 구현은 가능하나 번거러워서...
chemkaaa (6,030 포인트) 님이 2014년 9월 26일 답변
익명사용자님이 2014년 10월 6일 채택됨
스타일마다 xml파일 하나씩 죄다 만들어놓고 클래스에서 setBackgroundResource로 지정해주고 수정해주는게 지금으로써는 제일 낫다는 말씀이신가요?
programmatically 하게 selector 만들 수 있습니다. -_ -;
사람마다 다를수 있다고 보지만 전 보통 그런식으로 구현합니다. 버튼 하나에 노말/눌러졌을때의 상태를 selector(xml)로 만들어 놓고 사용해요. 구지 클래스에 셋백그라운드 리소스를 넣지 않아도 xml 레이아웃에 직접 이미지로 넣으면 됩니다. 클래스로 만들어 놓고 관리하기에는 유지보수가  불편한방법이라 생각해서요. 물론 버튼의 모양이나 이미지가 여러개일경우 여러개를 만들기가 번거롭다고 느껴질 수 있는데.. 전 이방법이 그래도 구현하기 자유롭고 편하다고 생각하네요.
제 생각엔 setBackgroundResource로 xml 교체가 그나마 유지보수에 유리하지 않을까합니다.
눌러졌을때 이미지를 만들지 않아도 코드로 눌러진 상태를 표현할수 있었나요? IOS만 되는줄알았어요. 지금까지 디자이너 고생시켰네요..
큭 그럼 밑에 답 취소입니다. ㅠㅠ
소스코드로 표현이 가능한 범위도 있는데 이미지를 따로 만들어놓으면 더 시각적으로 뛰어난 처리가 가능하지 않을까요? 전 지금 단순히 그레디언트 색깔, 외곽선, radius 정도만 바뀌게 해놓아서..
아. 요즘은 플랫한게 대세라 이미지 파일없이 작업을 하긴하는데 그래도 셀렉터에 색상값이나 shape  그레디언트 이런것들을 하나하나 다 만들어야 하지 않나요?
aucd29 말씀은 눌렀을때/ 평소 모양이나 색상을 구지 하나하나 안만들어도 된다는 이야기 같은데.. 방법 알고싶네요. 혹은 힌트라도 알수 있을까요? 저도 노가다라고 생각하는 부분이라...
그런 건 안 되지 않나요. android:state_pressed 등으로 상태 구분해서 각 상태마다 나타날 변화 다 xml 안에 지정해줘야 하는 걸로 알고 있는데.
참고들 하세요..
        StateListDrawable states = new StateListDrawable();
        states.addState(new int[] { android.R.attr.state_pressed }, new ColorDrawable(0xffff0000));
        states.addState(new int[] { -android.R.attr.state_enabled }, new ColorDrawable(0xff00ff00));
        states.addState(new int[] { }, new ColorDrawable(0xff0000ff));
아 역시 API에서 웬만한 건 다 지원을 하고 있군요... 써보니 복잡해질수록 xml로 그냥 만들어두고 로드하는게 확실히 더 낫다는 결론이 내려지긴 하는데 여태 안 되는줄 알았네요.
+1 추천
android drawable state_pressed 로 검색하세요
쎄미 (162,410 포인트) 님이 2014년 9월 26일 답변
제가 질문을 되게 애매하게 한 것 같네요... 눌렀을때 색이 변하는 것까지 해서 selector.xml을 작성해놓고 쓰고 있는데, 해당 xml 안의 색상코드를 자바소스에서 자유자재로 변경하는 방법이 없냐는 질문이었습니다.
...