라운드 버튼 만들기, shape solid 배경색 변경

먼저 res> drawable 안에 xml을 하나 만들어 shape를 추가한다.
본인은 roundbtn.xml이라고 만들었다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ff0000" />
    <corners android:bottomRightRadius="20dp"
        android:bottomLeftRadius="20dp"
        android:topRightRadius="20dp"
        android:topLeftRadius="20dp"/>
</shape>

라운드가 각 4방향에 20dp로 라운드되게 만든 shape다.

 

이제 버튼에 background 에 roundbtn.xml을 추가하자.

<Button
  android:id="@+id/signaldocentcolor"
  android:layout_width="20dp"
  android:layout_height="20dp"
  android:background="@drawable/roundbtn"
  />

 

이렇게 만들어두기만 하면 괜찮은데 간혹 상황에 따라 동그랗게 만든 버튼의 색이 변경되어야 할 때가 있다.

그런데 바로 버튼에 버튼.setBackgroundColor(0xff99cc00); 이런식으로 배경색을 바꾸면 drawable/roundbtn 넣었던 것이 빠져버려서 네모낳게 돌아가고 배경색만 바뀌게 된다.

Drawable roundDrawable = getResources().getDrawable(R.drawable.roundbtn);
roundDrawable.setColorFilter(0xff99cc00, PorterDuff.Mode.SRC_ATOP);
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
      버튼.setBackgroundDrawable(roundDrawable);
} else {
      버튼.setBackground(roundDrawable);
}

이렇게 설정하면 os에 버전에 맞춰 필터가 적용되어 컬러가 바뀌게 된다.  위 예제는 #ff99cc 컬러로 변경한 코드이다.

TOP