Как убрать отступы вокруг кнопок в Android?

184

В моем приложении для Android у меня есть этот макет:

<?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 был правильным в течение двух лет. Вы можете пометить это как так?
JohnnyLambada
1
Этот вопрос требует редактирования, чтобы иметь лучшее название. Это стало первым результатом в Поиске Google, пока это действительно не отвечает на вопрос.
SOFe

Ответы:

435

Для меня проблема оказалась minHeight и minWidth на некоторых темах Android.

В элемент Button добавьте:

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

Или в стиле вашей кнопки:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
Д.А. Терре
источник
5
Прошло некоторое время, пока я не понял, что я имею дело не с каким-то странным поведением заполнения, а с minHeight.
Пиюсн
7
Я не думаю, что этот ответ на самом деле отвечает на первоначальный вопрос вообще. Но я все еще рад, что наткнулся на это, потому что я не мог понять, почему мой Buttonвсе еще занимает так много места даже после установки его android:background="@null". Тот факт, что Buttonстиль по умолчанию является ответственным, очень хороший совет.
Тони Чан
Важно использовать как android: minHeight = "0dp" android: minWidth = "0dp", так и не только один из них.
Рикардо
Это удаляет закругленный угол и волновой эффект с кнопки на Android Nougat, есть идеи, что может быть причиной такого поведения?
rraallvv
Этот ответ решил проблему с GridLayout, содержащим кнопки с опциями autoSize для текста, приходящего в бешенство, поскольку я пытался заставить больше кнопок вписываться в строки / столбцы. Простой ответ, который занял у меня много времени, чтобы найти ...
Майк Ханафей,
73

Мое решение было установлено в 0 свойства insetTop и insetBottom.

<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"/>
sochas
источник
1
Это то, что решило проблему и для меня! Спасибо!
SPM
1
это работает для меня
Ankit Saini
1
Спасибо, у меня
сработало
46

Это не заполнение, это тень вокруг кнопки на ее фоне. Создайте свой собственный фон, и он исчезнет.

Делян
источник
6
Я сделал. не исчез
Хасан
Как можно измерить его размер?
Иман Акбари
Вот и все, @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
Я был бы осторожен, используя это решение. Он просто скрывает фон кнопки (границы + тени), используя отрицательные поля. Что такое изменение стиля, а border + shadow занимает больше 5dp? Я бы предпочел использовать решение Делян / Кейси Мюррей, чтобы быть в безопасности.
lenrok258
Кроме того, отрицательные поля официально не поддерживаются в Android, поэтому я бы тоже этого избегал
Тим Кист
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

Я новичок в Android, но у меня была похожая ситуация. Я сделал то, что предложил @Delyan, а также использовал android: background = "@ null" в файле макета xml.

Кейси Мюррей
источник
6

В наборе XML кнопки android:includeFontPadding="false"

user1005462
источник
6

У меня была такая же проблема, и кажется, что это из-за цвета фона кнопки. Попробуйте изменить цвет фона на другой, например:

android:background="@color/colorActive"

и посмотреть, если это работает. Затем вы можете определить стиль, если хотите использовать кнопку.

Панайотис
источник
Это удаляет возможность выделения / анимации кнопки.
Altus
6

Снять верхнюю и нижнюю прокладку

<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

Это не отступы, а или тень фона или проблема с minHeightи minWidth.

Если вы по-прежнему хотите получить приятный волновой эффект, вы можете создать свой собственный стиль кнопок, используя ?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
JUIL
источник
1

Дайте вашей кнопке собственный фон: @ drawable / material_btn_blue

Mike6679
источник
0

Вы также можете сделать это с layout_width(height) параметрами.

Например, я удалил верхнее и нижнее пространство с android:layout_height="18dp"кодом.

Макс Зонов
источник
0

Стандартная кнопка не должна использоваться на полную ширину, поэтому вы испытываете это.

Задний план

Если вы посмотрите на Material Design - Button Style, то увидите, что кнопка имеет область щелчка высотой 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?

Mohammad7G
источник
0

После нескольких часов копаться несколько ответов я , наконец , нашел решение , которое не использует другой элемент, манипулировать minHeightили minWidth, или даже оборачивать Buttonвокруг RelativeLayout.

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

Основной вывод здесь - установка переднего плана, а не фона, как предусмотрено во многих ответах. Изменение самого фона на selectableItemBackgroundпросто перезапишет любые изменения, сделанные вами в цвете / фоне кнопки, если таковые имеются.

Изменение переднего плана дает вам лучшее из обоих миров: избавьтесь от «невидимого» отступа и сохраните дизайн вашей кнопки.

Altus
источник
0

Вы можете использовать стиль без полей в AppCompatButton, как показано ниже. и использовать Android: фон с ним.

стиль = "@ стиль / 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" />

Вывод:

введите описание изображения здесь

Шихаб Уддин
источник