해당 포스팅은 이미지(image)와 텍스트(text)가 모두 있는 버튼을 만드는 방법에 대해 설명한다.
보통 버튼에 이미지를 넣기 위해서는 ImageButton 위젯을 사용하는데,
아래와 같이 이미지와 텍스트가 모두 넣고 싶은 경우에는 Button을 사용한다.
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/btn_signin_round"
android:backgroundTint="@color/colorFacebookSingIn"
android:drawableLeft="@drawable/btn_signin_facebook_logo"
android:paddingLeft="10dp"
android:textColor="@color/white"
android:text="@string/signin_facebook"
android:layout_marginBottom="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"/>
위의 코드는 화면 캡쳐 이미지의 가장 아래에 위치한 FACEBOOK LOGIN 버튼이다.
Button에 이미지와 텍스트를 넣기 위해서는 android:drawable~ 속성과 android:text 속성이 필요하다.
아래에서 볼 수 있듯이 drawableLeft, drawableStart, drawableBottom 등이 있어 필요에 맞게 사용하면 된다. 예시 이미지의 경우 버튼의 왼쪽에 배치하고자 했기 때문에 drawableLeft를 사용하였다.
위의 버튼 예시의 경우 테두리를 둥글게 만든 형태이다.
이 경우에는 drawable 폴더에 Drawable Resource File을 생성하여 원하는 모양을 커스텀할 수 있다.
물론 버튼 뿐만 아니라 Edittext 등 여러 위젯에 적용할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp"/>
<solid android:color="@color/white"/>
</shape>
<shape> 태그 안에 여러 가지 속성을 사용하여 커스텀할 수 있다.
- <corners> : 테두리 코너의 radius 속성을 사용하여 전체 테두리나, 4개의 테두리의 radius를 각각 설정할 수 있다.
- <solid> : 도형의 색상을 설정할 수 있다.
- <stroke> : 테두리 선의 색상, 넓이, 대시 모양 등을 설정할 수 있다.
- <gradient> : 도형에 그라데이션을 설정할 수 있다.
👆 만약 같은 모양에 여러 가지 색상을 적용하고 싶다면?
🤷♀️ <solid> 속성만 변경한 같은 코드의 파일을 여러 개 생성해야 하나?
🙅♀️ NO! 해당 drawable 파일을 적용할 위젯에서 backgroundTint 속성을 사용하여 색상만 변경할 수 있다!
위의 코드에서도 android:backgroundTint 속성을 사용하여 android:background 속성에서 지정한 drawable 파일의 solid 색상인 white가 아닌 사용자 지정 색상인 colorFacebookSignIn으로 지정하고 있다.
'ANDROID > Android 개발 이슈 & 해결' 카테고리의 다른 글
[Android] Text 부분 bold, color 커스텀 with Span (0) | 2021.08.31 |
---|---|
[Android] Activity Result API를 이용한 Google 로그인 (0) | 2021.08.18 |
[Android] Activity Result API : Fragment에서 registerForActivityResult() (0) | 2021.08.17 |
[Android] setOnNavigationItemSelectedListener deprecated 해결 (2) | 2021.08.03 |
[Android] startActivityForResult() deprecated 해결 : Activity Result API (0) | 2021.07.29 |
[Android] Your anti-virus program might be impacting your build performance. - Firebase 연동 오류 해결 (0) | 2021.07.27 |
[Android] Kotlin Android Extensions deprecated (0) | 2021.03.30 |
[Android] 동적 RecyclerView와 정적 RecyclerView 연결하기 (0) | 2021.03.21 |
댓글