如何正确删除Android中按钮周围的填充(或边距?)?

Che*_*eng 20 java android android-layout android-button android-view

目前,我有以下底部登录按钮.

没有按下按钮时

在此输入图像描述

按下按钮时

在此输入图像描述

XML看起来像这样

<LinearLayout
    android:background="?attr/welcomeBottomNavBarBackground"
    android:orientation="horizontal"
    android:id="@+id/sign_in_bottom_nav_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">
    <Button
        style="?android:attr/buttonBarButtonStyle"
        android:id="@+id/sign_in_button"
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="1.0"
        android:layout_height="48dp"
        android:gravity="center"
        android:layout_gravity="center"
        android:enabled="true"
        android:textAllCaps="true"
        android:text="@string/log_in" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想在按下按钮时删除按钮周围的填充(或者我应该将其称为边距?请参阅我最底部的p/s部分).

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

我试过了

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

它不起作用也没有效果.


我进一步尝试

<Button
    ...
    ...
    android:background="@null"
    android:minHeight="0dp"
    android:minWidth="0dp" />
Run Code Online (Sandbox Code Playgroud)

按下时不再填充.然而,设计压制视觉效果的材料也将消失.

我可以知道在压制过程中删除按钮填充的最佳方法是什么,但保留材料设计按下的视觉效果?

P/S

我真的不知道是否应该称之为填充或边距.我希望实现的是,当我们按下底部区域时,按下视觉效果变化应覆盖整个100%底部区域(@+id/sign_in_bottom_nav_bar),而不是当前95%的底部区域.

Dav*_*jak 26

标准按钮不应该在全宽度使用,这就是您遇到此问题的原因.

背景

如果您查看材料设计 - 按钮样式,您将看到一个按钮具有48dp的高度单击区域,但由于某种原因将显示为36dp的高度.

这是您看到的背景轮廓,它不会覆盖按钮本身的整个区域.
它有圆角和一些填充,应该可以自己点击,包装其内容,而不是跨越屏幕底部的整个宽度.

如上所述,你想要的是一个不同的背景.不是标准按钮,而是可选项目的背景,具有良好的涟漪效果.

对于此用例?selectableItemBackground,您可以使用theme属性作为背景(特别是在列表中).
它将添加平台标准波纹(或<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 -->
Run Code Online (Sandbox Code Playgroud)

如果您的视图是唯一的视图并且跨越整个屏幕,则也无需添加布局权重

如果你对背景看起来有什么不同的想法,你必须自己创建一个自定义绘图,并在那里管理颜色和状态.


blu*_*are 19

很简单,使用如下inset属性:

android:insetTop="0dp"
android:insetBottom="0dp"
android:insetRight="0dp"
android:insetLeft="0dp"
Run Code Online (Sandbox Code Playgroud)