버튼 모서리 둥글게 만들기(drawable)

Minsoo Ki
KiDevLog
Published in
5 min readMar 7, 2021

앱을 디자인하다가 보면 원하는 대로 버튼, 텍스트 뷰, 레이아웃 등을 바꿔주고 싶을 때가 있다. 이 때에는 res/ -> drawable/ 폴더 밑에 새로운 xml파일을 만들어서 원하는대로 디자인한 후에 background에 드로어블 파일을 지정해줌으로써 바꿔줄 수 있다.

res 폴더 밑에 drawable 폴더에 새로운 xml 파일을 추가하고, root element를 shape로 설정해보자.
위에서 추가한 xml파일의 코드 부분을 보면 이러하다.

예를 한가지 들어보자.

Shape drawable 예시
예시 코드에 따른 도형의 이미지

먼저 <shape ~~” ~ ” android:shape “rectangle”> 의 의미는, 디자인 할 기본 도형이 직사각형이라는 의미이다. oval(타원), line(선), ring(고리) 등의 기본 도형이 더 있다. 따라서 위의 도형은 기본적으로 직사각형을 따른다.

<size/> 는 말 그대로 디자인 할 도형의 크기를 결정하는 요소이다.

android:width :도형의 가로 크기

android:height :도형의 세로 크기

따라서 위의 코드에 따르면 도형은 가로, 세로 100dp짜리 직사각형 도형이다.

<gradient/> 는 도형 안에 색을 채울 때, 그라데이션을 주고 싶다면 사용하는 요소이다.

android:angle :그라데이션의 방향

android:startColor :그라데이션의 시작색

android:endColor :그라데이션의 끝색

angle축은 -x축을 기준으로 시계방향이 양의 방향이다. 즉 ,45도로 설정한다면 왼쪽 아래부터 오른쪽 위로 가는 축이 형성되고, 왼쪽 아래부터 startColor를 배정한다.

따라서 위의 코드에 따르면, -x축 방향에서 시계방향으로 45도 돌린 축을 기준으로 왼쪽 아래에서부터, #123456 을 시작으로 #afd로 끝나는 그라데이션을 도형 안에 채우는 것이다.

<corners/> 는 사각형의 모서리를 둥글게 만들고 싶을 때 사용한다.

android:topRightRadius :오른쪽 상단 모서리의 반경

android:topLeftRadius:왼쪽 상단 모서리의 반경

android:bottomRightRadius :오른쪽 하단 모서리의 반경

android:bottomLeftRadius :왼쪽 하단모서리의 반경

따라서 위의 코드에 따르면 도형의 네 모서리의 반경의 크기는 각각 5dp이다.

<stroke/> 는 도형의 획의 속성의 지정한다.

android:width : 획의 두께를 나타낸다.

android:color : 획의 색깔을 나타낸다.

android:dashWidth : 점선의 크기를 나타낸다.

android:dashGap : 점선간의 거리를 나타낸다.

즉 위의 예에서는 획의 두께는 5dp이고, 획의 색은 #adadad이다. 그리고 획을 점선으로 나타낼껀데, 점선의 크기는 20dp이고 점선간의 거리는 40dp가 된다.

<padding/> 는 배경을 기준으로 안에 들어가는 뷰 요소의 상대적인 위치를 나타낸다.

android:left : 왼쪽 패딩 지정

android:right : 오른쪽 패딩 지정

android:top : 위쪽 패딩 지정

android:bottom :아래쪽 패딩 지정

따라서 위의 코드예시에 따르면, 배경을 기준으로 왼쪽에서 100dp 떨어진 위치에 뷰 요소가 배치된다.

<solid/> 속성은 도형안에 채울 색상을 지정한다.

android:color : 색상 지정

<solid/> 와 <gradient/>는 도형 안의 색을 채운다는 점에서 겹친다. 두 개를 다 쓴다면, 제일 아래에 있는 코드로 색을 채운다.

실제로 이 xml파일을 배경으로 지정하면 어떻게 될까?

텍스트뷰의 배경으로 위의 xml파일을 지정해보았다.
<TextView
android:id="@+id/text_foldername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/test_background"
android:text="메모 폴더 이름"
android:textColor="#000000"
android:textSize="25dp"
android:textStyle="bold" />

그림을 보면, 텍스트뷰레이아웃 전체를 배경이 감싸는 것을 알 수 있고, 왼쪽 패딩을 100dp로 지정했기에 배경의 왼쪽 가장자리로부터 100dp 떨어진 곳에 텍스트가 위치하는 것을 확인할 수 있다. 만약, 왼쪽 패딩을 -100dp로 설정한다면, 글자 중에 왼쪽 100dp는 보이지 않게 된다.

쉐이프 드로어블을 통해 원하는 디자인을 만들어 볼 수 있으면 좋겠다.

--

--