【问题标题】:Removing TextInputLayout extra top padding删除 TextInputLayout 额外的顶部填充
【发布时间】:2017-09-18 09:34:42
【问题描述】:

TextInputLayout 似乎总是在顶部有一些额外的填充(无论所有边距/填充都设置为 0):

布局如下:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/txt_amount"
            style="@style/EditTextStyle"
            android:hint="@string/hint_amount"
            android:inputType="numberDecimal"/>
    </android.support.design.widget.TextInputLayout>

如何去除这个多余的空间?

【问题讨论】:

  • 您的意思是在文本之上,还是在View 边界之上? stackoverflow.com/a/40696708
  • @MikeM。我的意思是在视图上方(EditTextTextInputLayout 的顶部边框之间的空间)。
  • 是的,这是浮动提示。如果您不打算使用它,您可以在布局 XML 中使用 hintEnabled="false" 禁用它,如我的链接答案中所示。哦,我想也有人在这里发布过。
  • 如何去除侧面的神秘填充物?

标签: android padding android-textinputlayout


【解决方案1】:

在EditText中添加这一行

android:translationY="-10dp"

【讨论】:

  • 这看起来像个黑客。如果可以在某处将其设置为零,将尽量避免它。
【解决方案2】:

您可以通过将 app:hintEnabled="false" 设置为 TextInputLayout 来删除 AppCompatEditText 上方的额外空间,但在您重新启用之前它不会显示提示。

欲了解更多信息,请转到Android Developer site -TextInputLayout

签出以下代码

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintEnabled="false">

    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/txt_amount"
        style="@style/EditTextStyle"
        android:hint="@string/hint_amount"
        android:inputType="numberDecimal"/>
</android.support.design.widget.TextInputLayout>

希望这有帮助..

@Rajesh

【讨论】:

  • 好的,这看起来很合理。除非有更好的解决方案,否则将接受。
  • 为我工作.. 谢谢
【解决方案3】:

你可以用这个

  <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@android:color/white">

            <com.bugle.customviews.RobotoLightEditText

                android:id="@+id/edtName"
                style="@style/StyledTilEditText"
                android:hint="@string/name"
                android:imeOptions="actionNext"
                android:inputType="textCapWords" />

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

【讨论】:

    【解决方案4】:

    接受的答案在版本 - 1.2.1 上对我不起作用,所以我做了一些实验并意识到填充实际上并非来自 TextInputLayout,而是来自 TextInputEditText。所以首先我从中删除了填充,但它看起来不均匀,所以我将自定义填充设置为 TextInputEditText 并且效果很好。只需将此行 android:padding="16dp" 添加到 TextInputEditText 替换 16dp 为您想要的值。

    【讨论】:

      【解决方案5】:

      有这样的结构:

      <com.google.android.material.textfield.TextInputLayout
                          android:id="@+id/til_project"
                          style="@style/LoginTextInputLayoutStyle"
                          android:layout_width="match_parent"
                          android:layout_height="match_parent"
                          android:layout_gravity="center"
                          app:errorEnabled="false">
      
                          <com.google.android.material.textfield.TextInputEditText
                              android:id="@+id/totalPiecesProduct"
                              android:layout_gravity="center"
                              android:gravity="center"
                              android:padding="0dp"
                              android:textSize="13sp"
                              style="@style/TextInputEditTextStyle"/>
      
                      </com.google.android.material.textfield.TextInputLayout>
      

      关键是:

      app:errorEnabled="false" in TextInputLayout

      `android:padding="0dp"` in `TextInputEditText`
      

      之前:

      之后

      【讨论】:

        【解决方案6】:

        您可以通过覆盖TextInputStyle的默认填充样式来做到这一点,(材料版本应该在1.1.0以上)

         <style name="CustomInputLayoutPadding" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
            <item name="boxBackgroundColor">@color/transparent</item>
            <item name="materialThemeOverlay">@style/CustomOverlayFilledPadding</item>
        </style>
        

        然后

         <style name="CustomeOverlayFilledPadding">
            <item name="editTextStyle">@style/CustomTextInputEditPaddingStyle</item>
        </style>
        

        然后

           <style name="CustomTextInputEditPaddingStyle" parent="@style/Widget.MaterialComponents.TextInputEditText.FilledBox">
            <item name="android:paddingStart" ns2:ignore="NewApi">2dp</item>
            <item name="android:paddingEnd" ns2:ignore="NewApi">2dp</item>
            <item name="android:paddingLeft">0dp</item>
            <item name="android:paddingRight">2dp</item>
            <item name="android:paddingTop">28dp</item>
            <item name="android:paddingBottom">12dp</item>
        </style>
        

        【讨论】: