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

변수값에 따라 버튼의 색상을 변경하는 방법

0 추천
버튼은 총 8개 이며 firebase에서 데이터를 가져와서 저장한 상태입니다

데이터는 두 종류로 0 또는 1 값을 string으로 받아오고 있습니다

처음 앱을 실행 시에 각 버튼의 색을 변수가 0일때와 1일때 다르게 표현하게 하고싶습니다

변수가 달라지면 버튼색 또한 바뀌게 하고싶은데 어떻게 해야 할까요?  java로 개발중입니다.
ss6638 (140 포인트) 님이 2021년 5월 30일 질문

1개의 답변

0 추천

selector drawable을 두개 준비하시구요. 하나는 0 일 때, 다른 하나는 1일 때 보여줍니다. selector를 사용하는 이유는 그냥 이미지나 배경색을 바꾸면 버튼을 클릭효과가 반영되지 않거든요. Firebase를 읽어오는 부분은 이미 작성을 하셨을 테니 콜백 안에서 

button.setBackground를 통해서 위에서 준비해둔 selector를 지정해주시면 됩니다.

// Java. 
// 님에게  좀 더 적합한 클래스, 변수 이름을 사용하세요.
public enum ButtonState {
    ZERO(R.drawable.one),
    ONE(R.drwable.two);

    @DrawableRes
    private final int drawableRes;

    public ButtonState(int drawableRes) {
        this.drawableRes = drawableRes;
    }

    public int getDrawableRes() {
        return this.drawableRes;
    }

    public static ButtonState of(int value) {
        switch (value) {
            case 0: 
                return ZERO;
            case 1:
                return ONE;
            default:
               throw IllegalArgumentException("Incorrect state:" + value);
        }
   }
}


// Activity or Fragment
int myVarilable = ...
try {
      changeButtonBackground(ButtonState.of(myVariable))
} catch (IllegalArgumentException e) {
   //님의 상황에 맞게 에러처리 하세요.
} 


private void changeButtonBackground(ButtonState buttonSate) {
     myButton.setBackground(buttonSate.getDrawableRes());
}


//.Kotlin
enum class ButtonState(@DrawableRes val drawableRes: Int) {
        ONE(R.drawable.one),
        TWO(R.drawable.two);

        companion object {
             fun of(value: Int): ButtonState {
                  return when (value) {
                       0 -> ONE
                       1 -> TWO
                       else  throw IllegalArgumentException("Incorrect state: $value")
                  }
             }
        }
}

val myValue: Int = ...
try {
    changeButtonBackground(ButtonState.of(myValue))
} catch (e: IllegalArgumentException) {
    // 에러처리
}

private fun changeButtonBackground(buttonSate: ButtonState) {
     myButton.background = buttonSate.drawableRes
}

 

spark (227,510 포인트) 님이 2021년 5월 31일 답변
...