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

时间:2015-08-18 20:35:25

标签: android android-layout android-edittext textview padding

我正在使用EditText,它总是在我的文字中向左右两侧添加一些填充。
添加android:includeFontPadding="false"没有帮助,使用否定android:layout_marginLeftandroid:layout_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"

            />

3 个答案:

答案 0 :(得分:31)

要删除EditText左侧和右侧的填充,您可以使用以下内容:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

确实 EditText 有它自己的可绘制填充,即使在 xml 中将所有填充/边距设置为零后仍然保留。 要从 EditText 中完全删除填充,您必须将其从实际上是 InsetDrawable 的 drawable 中删除。

您可以将 drawable 转换为 {} ,通过 InsetDrawable 方法获取原始 drawable。原始可绘制对象根本没有额外的间距,您可以通过 getDrawable() 将其设置为新背景到您的 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 } 看起来很难看。

enter image description here

要保留水平间距,您必须从插入的可绘制填充尺寸中减去原始填充尺寸。我假设 padding 是通过将原始 drawable padding 和 inset drawable insets 相加来计算的。因此,要仅检索插图,您必须执行减法。

以下是完整示例(对应于图片上的“仅水平删除间距”EditText):

EditText