【问题标题】:Android - reduce EditText floating label padding/margin?Android - 减少 EditText 浮动标签填充/边距?
【发布时间】:2015-10-12 16:50:26
【问题描述】:

是否可以将那些浮动标签(电子邮件/密码)放在框内。基本上减少提示和实际输入之间的空间。

我尝试填充顶部/底部。 editText 的顶部/底部边距。但他们都没有给出我想要的结果。


 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:id="@+id/emailWrapper"
    app:hintTextAppearance="@style/floatingLabel">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="54dp"
        android:paddingLeft="17dp"
        android:paddingRight="17dp"
        android:id="@+id/txtEmail"
        android:singleLine="true"
        android:inputType="textEmailAddress"
        android:hint="@string/emailPlaceholder"
        android:background="@drawable/btn_empty_stroke" />

</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintTextAppearance="@style/floatingLabel"
    android:id="@+id/passwordWrapper"
    android:layout_below="@+id/emailWrapper">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="54dp"
        android:paddingLeft="17dp"
        android:paddingRight="17dp"
        android:singleLine="true"
        android:inputType="textPassword"
        android:id="@+id/txtPassword"
        android:paddingTop="0dp"
        android:text="HELLO"
        android:hint="@string/passwordPlaceholder"
        android:background="@drawable/btn_empty_stroke" />

</android.support.design.widget.TextInputLayout>

【问题讨论】:

  • 如果你也降低高度怎么办?
  • @Alex 你有没有得到任何解决方案。我有同样的情况

标签: android android-layout android-edittext android-textinputlayout


【解决方案1】:

感谢@Frank N.Stein 的评论和降低高度的想法。它成功了。

回答我自己的问题。因为其他人可能会提出这个问题。

所以基本上我必须为 TextInputLayout 提供准确的高度并保持 EditText 的高度相同。还将 paddingTop 赋予 TextInputLayout 和 clipToPadding false。所以最终的文本框 xml 就这样出来了。

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_marginTop="20dp"
    android:layout_height="54dp"
    android:gravity="bottom"
    android:paddingTop="4dp"
    android:clipToPadding="false"  // above 3 lines are important
    android:id="@+id/emailWrapper"
    app:hintTextAppearance="@style/floatingLabel">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="54dp"
        android:paddingLeft="17dp"
        android:paddingRight="17dp"
        android:id="@+id/txtEmail"
        android:singleLine="true"
        android:inputType="textEmailAddress"
        android:hint="@string/emailPlaceholder"
        android:text="a@a.com"
        android:background="@drawable/btn_empty_stroke" />

</android.support.design.widget.TextInputLayout>

【讨论】:

  • 这可能在所有设备上看起来都不一样。如果有人在设备设置中增加系统字体会怎样?我敢打赌它不适合54dp
【解决方案2】:

只需添加到您的EditText 自定义背景:

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <padding android:bottom="4dp"/> // your padding value
            </shape>
        </item>
    <!-- customize your background items if you need -->
    </layer-list>

    <android.support.design.widget.TextInputLayout
     ...>
        <android.support.design.widget.TextInputEditText
            ...
            android:background="@style/your_custom_background"/>

然后将其应用于您的EditText,如果您使用固定高度,则使用您的填充值增加您的EditText 的高度。

【讨论】: