无法使用指南删除边距

Can't remove margin with guidline

我有简单的视图,底部有片段容器按钮。 我已经使用水平引导线,现在我在按钮的顶部和底部都有边距。 我在代码中没有看到这个边距,那么为什么我有这个边距以及如何删除它?

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <fragment
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:name="com.package.list.ListFragment"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </fragment>

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.9" />

    <Button
        android:id="@+id/list_btn"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:text="List"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline2" />
    
</androidx.constraintlayout.widget.ConstraintLayout>

You will use a command inside Android Studio called go to declaration which is cmd+B on a Mac or ctrl+B on Windows. I will just use ctrl+B for simplicity.

回答

我认为这是因为应用于按钮的默认样式。如果你在 Android Studio 中搜索它,你实际上可以看到 Button 样式包含这样的背景:

<item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>

然后当您 ctrl+B 这个文件时,您会看到名为 insetTopinsetBottom

的内容
<inset 
    android:insetTop="@dimen/abc_button_inset_vertical_material"
    android:insetBottom="@dimen/abc_button_inset_vertical_material">

同样,ctrl+B 在里面,你终于看到它们都等于 6dp。所以在你的 main activity 中,你需要做的就是将 insetTopinsetBottom 设置为 0dp,像这样:

<Button
    android:id="@+id/list_btn"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:insetTop="0dp"
    android:insetBottom="0dp"
    android:text="List"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline2" />