코딩 (독학)/★ Kotlin

[Android : Kotlin] 안드로이드 버튼 background drawable(shape) 적용 안되는 이유

짱득이 2022. 4. 26. 17:18
300x250
반응형


 

🐱‍🏍 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://stackoverflow.com/questions/52743190/when-using-theme-materialcomponents-light-noactionbar-style-setting-button-back/52751122

https://velmurugan-murugesan.medium.com/material-button-in-android-e4391a243b17

Kotlin #Android #Develop #코틀린 #안드로이드 #개발 #AppDevelop #앱개발

#baekjoon #github #백준 #깃헙 #깃허브 #프로그래밍 #앱개발자 #개발자 #취준 #취준생

 #알고리즘 #Algorithm #문풀이 #앱개발 #

 

728x90
반응형