Android 如何从EditText中删除所有默认填充?

Android 如何从EditText中删除所有默认填充?,android,android-layout,android-edittext,textview,padding,Android,Android Layout,Android Edittext,Textview,Padding,我正在使用一个EditText,它总是在我的文本的左右两侧添加一些填充。 添加android:includeFontPadding=“false”没有帮助,而使用否定的android:layout\u marginLeft或android:layout\u marginRight只会使EditText展开。 如何从默认添加的EditText中去除所有填充 <EditText android:layout_width="match_parent"

我正在使用一个
EditText
,它总是在我的文本的左右两侧添加一些填充。
添加
android:includeFontPadding=“false”
没有帮助,而使用否定的
android:layout\u marginLeft
android:layout\u marginRight
只会使
EditText
展开。
如何从默认添加的
EditText
中去除所有填充

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="20dp"
            android:fontFamily="roboto-regular"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"
            android:layout_marginLeft="-5dp"
            android:layout_marginRight="-5dp"
            android:includeFontPadding="false"
            android:textSize="@dimen/size"
            android:textColor="@color/color"
            android:inputType="textCapWords"
            android:hint="@string/hint"
            android:editable="false"

            />

要删除
EditText
左右两侧的填充,可以使用以下方法:

<EditText
    ...
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    ... />

如果您还想删除下划线填充,请添加负边距:

<EditText
    ...
    android:layout_marginLeft="-4dp"
    android:layout_marginRight="-4dp"
    ... />

事实上,EditText有自己的可绘制填充,即使在xml中将所有填充/边距设置为零后,也会保留该填充。 要完全删除EditText中的填充,必须将其从其可绘制(实际上是可插入绘制)中删除

您可以将drawable强制转换为
InsetDrawable
,通过
getDrawable()
方法获取原始drawable。原始的drawable根本没有额外的间距,您可以通过
setBackground()
将其设置为新的背景,并将其设置为
EditText
小部件

val etRemovedSpacingAllSides = findViewById<EditText>(R.id.etRemovedSpacingAllSides)
if (etRemovedSpacingAllSides.background is InsetDrawable) {
    val insetDrawable = etRemovedSpacingAllSides.background as InsetDrawable
    val originalDrawable = insetDrawable.drawable!!
    etRemovedSpacingAllSides.background = originalDrawable
}

发布您的xml即使不是全部,也很有趣,因为它来自于背景,特别是如果背景是一个九补丁PNG文件。@Commonware:我没有使用任何背景。请参阅OPSet中的更新:
android:padding=“0dp”android:background=“@null”tools:text=“test test”
“我没有使用任何背景”-是的,您正在使用。你没有改变背景。因此,无论您使用什么主题,您都可以获得标准背景。非常简单,因此默认情况下它只有一些非零填充。这将删除文本的填充,但它下面的行仍将有填充,这使它看起来很糟糕(至少在安卓8中是这样)。尝试添加安卓:paddingBottom=“0dp”()Franco的评论是正确的。这个答案对我来说是无效的。有时负边际不是一个好主意。我在一些三星设备上遇到了上下文弹出菜单的问题
val editText = findViewById<EditText>(R.id.etRemovedSpacing)
if (editText.background is InsetDrawable) {
    val insetDrawable = editText.background as InsetDrawable
    val originalDrawable = insetDrawable.drawable!!
    val insetDrawablePadding = Rect()
    insetDrawable.getPadding(insetDrawablePadding)
    val originalDrawablePadding = Rect()
    originalDrawable.getPadding(originalDrawablePadding)

    // We subtract original padding dimensions from inset drawable padding dimensions.
    // We assume that padding is calculated by summing original drawable padding
    // and inset drawable insets. So to retrieve only insets we have to perform subtraction
    val insetDrawableInsets = Rect(
            insetDrawablePadding.left - originalDrawablePadding.left,
            insetDrawablePadding.top - originalDrawablePadding.top,
            insetDrawablePadding.right - originalDrawablePadding.right,
            insetDrawablePadding.bottom - originalDrawablePadding.bottom)
    // Remove side spacing from editText background to make it fit fully into layout width
    editText.background = InsetDrawable(
            originalDrawable,
            0, insetDrawablePadding.top, 0, insetDrawableInsets.bottom)
}