68

我需要检查我的图像视图的右上角。但是当我这样做时,我注意到我的复选框周围有一个默认边距。有没有办法去掉这个??

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

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" >

        <ImageView
            android:id="@+id/thumbImage"
            android:layout_width="100dp"
            android:layout_height="132dp"
            android:layout_gravity="center" />
    </FrameLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="#ff0000"
        android:gravity="center" >

        <CheckBox
            android:id="@+id/itemCheckBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_gravity="center"
            android:button="@drawable/checkbox_background"
            android:paddingLeft="0dp"
            android:paddingTop="0dp" />

    </LinearLayout>

</RelativeLayout>
4

7 回答 7

133

现在有更好的方法来做到这一点:

android:minWidth="0dp"
android:minHeight="0dp"
于 2019-06-10T11:29:06.283 回答
28

在android中删除单选按钮默认边距或填充

如果你使用 xml

android:minWidth="0dp"
android:minHeight="0dp"

如果以编程方式使用

 radiobtn.setMinimumHeight(0);
 radiobtn.setMinimumWidth(0);
于 2020-12-11T14:16:31.973 回答
27

您可以使用负边距。

android:layout_marginTop = "-5dp"
android:layout_marginRight = "-5dp"
于 2013-01-24T07:53:54.910 回答
5

这在Constraint Layout中对我有用。我希望它适用于另一种布局。

<androidx.appcompat.widget.AppCompatCheckBox
                ...
                android:translationX="-5dp"
                 />
于 2020-05-27T06:38:36.530 回答
1

如果您查看在onDraw()方法中由Checkbox类扩展的 CompoundButton 类的源代码,填充取决于重力

  @Override
    protected void onDraw(Canvas canvas) {
        ...

            final int top;
            switch (verticalGravity) {
                case Gravity.BOTTOM:
                    top = getHeight() - drawableHeight;
                    break;
                case Gravity.CENTER_VERTICAL:
                    top = (getHeight() - drawableHeight) / 2;
                    break;
                default:
                    top = 0;
            }
       ...
    }

所以你可以做的是将属性重力的xml值设置为
android:gravity="top|start"

但这只能在您不想在复选框中使用文本时使用,因为重力用于使文本居中。

于 2021-01-09T12:38:06.187 回答
0

感谢@VladislavShcherbakov 的评论,它是:

android:paddingLeft="-5dp"
android:layout_marginStart="-5dp"
android:layout_marginLeft="-5dp"
// android:translationX="-5dp"
于 2019-11-21T15:44:50.757 回答
-3

为什么要用负填充和所有复杂化。使用简单直接的方法,为 FrameLayout 提供填充,而不是在最上面的相对布局中进行填充。由于您在第二个布局中只有 CheckBox,因此无需为其提供填充。

如果您遇到任何问题或有任何疑问,请告诉我

于 2013-01-24T08:06:43.733 回答