안드로이드에서 버튼 주위의 패딩을 제거하는 방법은 무엇입니까?


184

내 안드로이드 앱에는 다음과 같은 레이아웃이 있습니다.

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical">

    <fragment
         android:id="@+id/map"
         android:layout_width="match_parent"
         android:layout_height="0dp" 
         android:layout_weight="1" 
         class="com.google.android.gms.maps.SupportMapFragment"/>

    <Button
        android:id="@+id/button_back"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="CloseActivity"
        android:padding="0dp"
        android:text="@+string/back" />

</LinearLayout>

미리보기와 전화에서는 다음과 같습니다.

하단 영역의 버튼에서 볼 수 있듯이 패딩이 있습니다.

어떻게 제거하고 버튼이 바닥 영역을 완전히 채울 수 있습니까?


6
DATerre의 답변은 2 년간 정확합니다. 그렇게 표시 할 수 있습니까?
JohnnyLambada

1
이 질문은 더 나은 제목을 갖도록 편집해야합니다. Google 검색에서 첫 번째 결과가되었으므로 실제로 질문에 대답하지는 않습니다.
SOFe

답변:


435

나를 위해 문제는 일부 Android 테마에서 minHeight 및 minWidth로 밝혀졌습니다.

Button 요소에서 다음을 추가하십시오.

<Button android:minHeight="0dp" android:minWidth="0dp" ...

또는 버튼 스타일로 :

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>

5
내가 이상한 패딩 동작을 다루지 않고 오히려 minHeight를 다루고 있음을 깨달을 때까지 시간이 걸렸습니다.
Pijusn

7
나는이 답변이 실제로 원래의 질문에 전혀 대답하지 않는다고 생각합니다. 그러나 나는 왜 그것을 Button설정 한 후에도 왜 여전히 많은 공간을 차지하고 있는지 알 수 없기 때문에 그것을 만났기 때문에 기쁘다 android:background="@null". Button의 기본 스타일이 책임이 있다는 사실 은 매우 유용한 팁입니다.
Tony Chan

android : minHeight = "0dp"android : minWidth = "0dp"중 하나만 사용하는 것이 중요합니다.
Ricardo

이렇게하면 Android Nougat의 버튼에서 둥근 모서리와 잔물결 효과가 제거됩니다.이 동작의 원인은 무엇입니까?
rraallvv

이 답변은 행 / 열에 맞는 버튼을 더 많이 얻으려고 할 때 텍스트에 자동 크기 옵션이있는 버튼이 포함 된 GridLayout의 문제를 해결했습니다. 찾기 위해 오랜 시간이 걸렸던 간단한 대답 ...
Mike Hanafey

71

내 솔루션은 insetTop 및 insetBottom 속성을 0으로 설정했습니다.

<android.support.design.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:text="@string/view_video"
        android:textColor="@color/white"/>

1
이것이 나에게도 문제를 해결 한 것입니다! 감사!
SPM

46

패딩이 아니며 배경 드로어 블에서 버튼 주위의 그림자입니다. 자신의 배경을 만들면 사라집니다.


6
나는했다. 사라지지 않았다.
hasan

크기는 어떻게 측정 할 수 있습니까?
Iman Akbari

이것이 바로 @Behr입니다. 배경을 버튼 색상으로 변경
Ramon

방금 배경 이미지에 투명한 패딩이 있음을 알게되었습니다
Fruit

22

해결 방법은 -ve다음과 같이 여백에 값 을 사용하려고 할 수 있습니다 .

<Button
    android:id="@+id/button_back"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="CloseActivity"
    android:padding="0dp"
    android:layout_marginLeft="-5dip"
    android:layout_marginRight="-5dip"
    android:layout_marginTop="-5dip"
    android:layout_marginBottom="-5dip"
    android:text="@string/back" />

그 공간이 사라질 것입니다. 나는 당신이 적절한 dip가치를 선택할 수 있다는 것을 의미합니다 . 그것은 나를 위해 일했다. 그것이 당신을 위해 작동하기를 바랍니다.


4
이 솔루션을 사용하는 데 신중해야합니다. 그것은 마이너스 마진을 사용하여 버튼 배경 (테두리 + 그림자)을 숨기는 것입니다. 스타일 변경이란 무엇이며 테두리 + 그림자는 5dp 이상을 차지합니까? 차라리 Delyan / Casey Murray 솔루션을 사용하여 안전한 측면에 있습니다.
lenrok258

또한 부정적인 마진은 안드로이드에서 공식적으로 지원되지 않으므로 이것을 피할 것입니다.
Tim Kist

14

토글 버튼 주위의 패딩을 제거하려면 minWidth 및 minHeight 0dp를 설정해야합니다.android:minWidth="0dp" android:minHeight="0dp"

  <ToggleButton
        android:id="@+id/toggle_row_notifications"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"
        android:minHeight="0dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/_5sdp"
        android:textOn=""
        android:textOff=""
        android:background="@android:color/transparent"
        android:button="@drawable/toggle_selector"
        />

드로어 블 파일을 다음과 같은 버튼 속성으로 설정하십시오. android:button="@drawable/toggle_selector"

아래는 내 toggle_selecter.xml파일입니다

<?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/notifications_toggle_on" 
                  android:state_checked="true"/>
            <item android:drawable="@drawable/notifications_toggle_off" 
                  android:state_checked="false"/>
     </selector>

9

나는 안드로이드에 익숙하지 않지만 비슷한 상황이 있었다. @Delyan이 제안한 작업을 수행하고 XML 레이아웃 파일에서 android : background = "@ null"을 사용했습니다.



6

나는 같은 문제가 있었고 버튼의 배경색 때문인 것 같습니다 . 배경색을 다른 색으로 변경해보십시오. 예 :

android:background="@color/colorActive"

작동하는지 확인하십시오. 그런 다음 버튼을 사용하려는 경우 스타일정의 할 수 있습니다 .


버튼의 강조 / 애니메이션 기능이 제거됩니다.
Altus

5

상단 및 하단 패딩을 제거하려면

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"//to effect the following parameters, this must be added!
        android:insetTop="0dp"
        android:insetBottom="0dp"/>

왼쪽 및 오른쪽 패딩을 제거하려면

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"//to effect the following parameters, this must be added!
        android:insetLeft="0dp"
        android:insetRight="0dp"/>

4

그것은 패딩하지만, 또는 배경 당김의 그림자 또는 문제 아니다 minHeightminWidth.

여전히 멋진 잔물결 효과를 원한다면 다음을 사용하여 자신 만의 버튼 스타일을 만들 수 있습니다 ?attr/selectableItemBackground.

<style name="Widget.AppTheme.MyCustomButton" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:minHeight">0dp</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:layout_height">48dp</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

그리고 버튼에 적용하십시오 :

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />

2

패딩, 여백 또는 최소 높이 / 폭이 아닌 것 같습니다. android:background="@null"버튼을 설정 하면 터치 애니메이션이 손실되지만 배경을 설정하면 해당 경계를 수정합니다.


나는 현재 다음과 같이 일하고있다 :

minSdkVersion 19
targetSdkVersion 23

1

@ drawable / material_btn_blue : 버튼에 사용자 정의 배경을 제공하십시오


0

layout_width(height)매개 변수를 사용 하여 수행 할 수도 있습니다 .

예를 들어 android:layout_height="18dp"코드로 상단과 하단 공간을 삭제했습니다 .


0

표준 버튼은 전체 너비 로 사용하지 않아야하므로이 문제가 발생합니다.

배경

당신이 한 번 봐 경우 재질 디자인 - 버튼 스타일은 당신이 버튼은 48dp 높이 클릭 영역을 가지고 있지만, 용 어떤 이유로 높이 36dp로 표시됩니다 것을 볼 수 있습니다.

이것은 배경 개요이며 버튼 자체의 전체 영역을 다루지 않습니다.
모서리가 둥글고 일부 패딩이 있으며 클릭 할 수 있어야하며 내용을 감싸고 화면 하단의 전체 너비에 걸쳐서는 ​​안됩니다.

해결책

위에서 언급했듯이 원하는 것은 다른 배경 입니다. 표준 버튼은 아니지만이 멋진 파급 효과가있는 선택 가능한 항목의 배경입니다.

이 사용 사례에는 ?selectableItemBackground배경 (특히 목록)에 사용할 수 있는 테마 속성이 있습니다.
플랫폼 표준 리플 (또는 <21의 색상 상태 목록)을 추가하고 현재 테마 색상을 사용합니다.

유스 케이스의 경우 다음을 사용할 수 있습니다.

<Button
    android:id="@+id/sign_in_button"
    style="?android:attr/buttonBarButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Login"
    android:background="?attr/selectableItemBackground" />
                   <!--  /\ that's all -->

보기가 유일한 화면이고 전체 화면에 걸쳐있는 경우 레이아웃 가중치를 추가 할 필요가 없습니다.

배경이 어떻게 보이는지에 대해 다른 아이디어가 있다면 사용자 정의 드로어 블을 직접 만들고 거기에서 색상과 상태를 관리해야합니다.

이 답변은 질문 : Android의 버튼 주위에 패딩 (또는 여백)을 올바르게 제거하는 방법은 무엇입니까?


0

여러 답변을 몇 시간 동안 파고 들자 마침내 다른 요소를 사용하지 않거나 조작 minHeight하거나 minWidth또는 심지어 감싸는 솔루션을 찾았 Button습니다 RelativeLayout.

<Button
    android:foreground="?attr/selectableItemBackground"
    android:background="@color/whatever" />

여기에서 주요 테이크 아웃은 많은 답변이 규정 한 배경 대신 전경의 설정입니다. 배경 자체를 selectableItemBackground변경하면 버튼의 색상 / 배경에 대한 변경 사항이 있으면 덮어 씁니다.

포 그라운드를 변경하면 두 가지 장점을 모두 얻을 수 있습니다. "보이지 않는"패딩을 제거하고 버튼 디자인을 유지하십시오.


0

아래와 같이 AppCompatButton 에서 Borderless 스타일을 사용할 수 있습니다 . 사용은 안드로이드 : 배경을 함께.

style = "@ style / Widget.AppCompat.Button.Borderless.Colored"

버튼 코드

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_visa_next"
        android:background="@color/colorPrimary"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/spacing_normal"
        android:text="@string/next"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

산출:

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.