如何删除Android中按钮周围的填充?

ome*_*ega 150 java android button

在我的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>
Run Code Online (Sandbox Code Playgroud)

在预览和手机上,它看起来像:

正如你在底部区域的按钮上看到的那样,那里有一些填充物.

我怎样才能摆脱它,让按钮完全填满底部区域?

小智 383

对我来说,问题原因是一些Android主题的minHeight和minWidth.

在Button元素上,添加:

<Button android:minHeight="0dp" android:minWidth="0dp" ...
Run Code Online (Sandbox Code Playgroud)

或者按钮的样式:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这个答案实际上完全回答了原来的问题.但我仍然很高兴我遇到它因为我无法弄清楚为什么我的`Button`在设置它的`android:background ="@ null"`之后仍然占用了这么多空间."Button"的默认样式是一个非常好的提示. (7认同)
  • 花了一段时间,直到我意识到我没有处理一些奇怪的填充行为,而是minHeight. (2认同)

Del*_*yan 42

那不是填充,它是背景中可以绘制的按钮周围的阴影.创建自己的背景,它将消失.

  • 我做到了.并没有消失. (6认同)

Pra*_*ddy 26

对于 MaterialButton,添加以下属性,它将完美运行

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:insetTop="0dp"
    android:insetBottom="0dp"/>
Run Code Online (Sandbox Code Playgroud)


Sho*_*uri 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" />
Run Code Online (Sandbox Code Playgroud)

它会使这个空间消失.我的意思是你可以选择合适的dip值,这样它就会消失.它对我有用.希望对你有效.

  • 我会小心使用这个解决方案.它的作用是使用负边距隐藏按钮背景(边框+阴影).什么是样式更改和边框+阴影需要超过5dp?我宁愿使用Delyan/Casey Murray解决方案来保证安全. (4认同)

Ali*_*yan 17

删除顶部和底部填充

<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"/>
Run Code Online (Sandbox Code Playgroud)

删除左右填充

<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"/>
Run Code Online (Sandbox Code Playgroud)


Yas*_*ane 13

要删除切换按钮周围的填充,我们需要设置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"
        />
Run Code Online (Sandbox Code Playgroud)

将您的可绘制文件设置为按钮属性,如: 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>
Run Code Online (Sandbox Code Playgroud)


Faw*_*aal 10

添加这些属性:

    android:insetTop="0dp"
    android:insetBottom="0dp"
    android:minWidth="0dp"
    android:minHeight="0dp"
    android:padding="0dp"
Run Code Online (Sandbox Code Playgroud)


Cas*_*ray 9

我是android的新手,但我有类似的情况.我做了@Delyan建议的,并且在xml布局文件中也使用了android:background ="@ null".


vip*_*per 9

您应该在按钮中使用minHeightminWidth属性,并确保使用padding

    android:minHeight="0dp"
    android:minWidth="0dp"
Run Code Online (Sandbox Code Playgroud)


小智 8

我的解决方案将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"/>
Run Code Online (Sandbox Code Playgroud)

  • 这也为我解决了问题!谢谢! (5认同)

Pan*_*tis 7

我有同样的问题,似乎是因为按钮的背景颜色.尝试将背景颜色更改为其他颜色,例如:

android:background="@color/colorActive"
Run Code Online (Sandbox Code Playgroud)

看看它是否有效 如果要使用该按钮,则可以定义样式.


use*_*462 5

在按钮的XML集中 android:includeFontPadding="false"


All*_*oso 5

这不是填充,而是背景可绘制的阴影或 and 的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>
Run Code Online (Sandbox Code Playgroud)

并将其应用到按钮上:

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />
Run Code Online (Sandbox Code Playgroud)