🐱🏍 Android Button background drawable 적용이 되지 않을 때 대처 방법
Android Button Customizing을 하기 위하여 drawable 폴더에 shape를 만들고, Button 태그에서 background에 적용시켜줄 때 적용이 되지 않고 default button 모양이 그대로 보여질 때가 있다. 이 경우에 어떻게 대처해야 하는지를 다루었다.
shape를 아래 코드와 같이 만들어 주었다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="#FFFFFF"
/>
<corners
android:bottomLeftRadius="20dp"
android:topLeftRadius="20dp"
/>
</shape>
위와 같은 모양을 나타내기 위해 shape 코드를 작성 해 주었고, 아래와 같이 Button에 적용 해 주었다.
<Button
android:id="@+id/addressSearchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:drawableLeft="@drawable/address_search_button"
android:text="주소로 방 찾기"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@id/guideline2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="480dp"
android:layout_marginEnd="-39dp"
android:background="@drawable/search_form_LeftButton"
/>
그랬더니 처음 버튼을 추가하면 나오는 Default Button 이 나와버린다.
이런 경우, <Button ... /> 을 <android.widget.Button /> 또는 <androidx.appcompat.widget.AppCompatButton /> 으로 바꿔주면 해결된다.
🐱🏍 적용이 되지 않았던 원인은 ?
res/values/themes/themes.xml 을 살펴보자. 아래와 같은 코드를 확인할 수 있다.
3번 라인을 살펴보자.
<style name="Theme.HomeMark" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
바로 이 부분 때문인데, MaterialComponents 디자인을 상속받고 있기 때문이다.
MaterialComponents 디자인은 아예 background 속성을 자체적으로 갖고 있어버리기 때문에 변경되지 않는 것이다.
그렇기 때문에 이 부분을 parent='Theme.AppCompat.Light'로 바꿔주기만 해도 문제가 해결되긴 하지만, 해당 style을 적용하고 있는 Activity나 프로젝트 적체의 theme도 변경될 수 있으니 주의하여야 하고, 표준으로 사용하고 있는 것 같기 때문에 그냥 그때그때 Button의 태그만 바꿔서 사용하는게 좋을 것 같다.
참고
https://velmurugan-murugesan.medium.com/material-button-in-android-e4391a243b17
Kotlin #Android #Develop #코틀린 #안드로이드 #개발 #AppDevelop #앱개발
#baekjoon #github #백준 #깃헙 #깃허브 #프로그래밍 #앱개발자 #개발자 #취준 #취준생
#알고리즘 #Algorithm #문풀이 #앱개발 #
'코딩 (독학) > ★ Kotlin' 카테고리의 다른 글
[Android : Kotlin] 코틀린에서 문자열을 쪼개는 2가지 방법 (Split과 StringTokenizer의 차이) (0) | 2022.04.20 |
---|---|
[Android : Kotlin] 안드로이드 콜백과 리스너에 대하여 (0) | 2022.04.19 |
[Kotlin] KAPT Plugin (Room Database 적용 필수 라이브러리) (0) | 2022.04.05 |
[Kotlin] 늦은 초기화 방법 (lateinit / lazy) (0) | 2022.04.05 |
[Android : Kotlin] 안드로이드 액티비티 생명주기 총 정리 (Android Activity Life Cycle) / 안드로이드 4대 구성요소 (컴포넌트 - 액티비티) (0) | 2022.03.27 |