【问题标题】:EditText inside TextInputLayout leaves empty space at the topTextInputLayout 内的 EditText 在顶部留下空白空间
【发布时间】:2018-06-07 11:45:51
【问题描述】:

我有密码字段,我想实现隐藏/显示密码功能。所以我使用了TextInputLayout。但是如果我在 TextInputLayout 中使用 EditText,它会在布局顶部留下空白空间。而且我需要使该密码字段的高度更小。有了这个差距,这是不可能的。 我尝试将 EditText 的高度设置为负值,但它不起作用。 android:layout_height="45dp" 用于使该字段更小,但它根本不起作用。 wrap_content 让它更高。

    <android.support.design.widget.TextInputLayout
            android:id="@+id/textInputLayout"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_marginEnd="45dp"
            android:layout_marginStart="42dp"
            app:passwordToggleDrawable="@drawable/login_password_eye"
            app:passwordToggleEnabled="true">

            <EditText
                android:id="@+id/passwordTextField"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/colorDivider"
                android:imeOptions="actionDone"
                android:inputType="textPassword"
                android:singleLine="true"
                android:textColor="@color/colorItemMajor"
                android:textSize="16sp" />

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

图片:

XML 代码 - 完整(我必须删除颜色和图像 + 顶部工具栏,但逻辑相同)

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/mainLoginLayout"
    android:orientation="vertical"
    android:clickable="true"
    android:focusableInTouchMode="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/loginLayout"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/imageLogin"
            android:layout_width="210dp"
            android:layout_height="210dp"
            android:layout_gravity="center"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/emailLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="E-mail"
            android:textColor="@color/colorBlack"
            android:textSize="16sp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            />

        <EditText
            android:id="@+id/emailTextField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="45dp"
            android:layout_marginStart="45dp"
            android:backgroundTint="@color/colorBlack"
            android:inputType="textEmailAddress"
            android:textColor="@color/colorBlack"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/passwordLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Password"
            android:textColor="@color/colorBlack"
            android:textSize="16sp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            />

        <android.support.design.widget.TextInputLayout
            android:id="@+id/textInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/login_password_padding"
            android:layout_marginStart="@dimen/login_password_field_padding"
            app:passwordToggleDrawable="@drawable/login_password_eye"
            app:passwordToggleEnabled="true"
            app:passwordToggleTint="@android:color/black">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/passwordTextField"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="0dp"
                android:backgroundTint="@color/colorDivider"
                android:imeOptions="actionDone"
                android:inputType="textPassword"
                android:singleLine="true"
                android:textColor="@color/colorItemMajor"
                android:textSize="@dimen/login_password_label_textsize" />

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

        <LinearLayout
            android:id="@+id/default_login_button"
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:gravity="center"
            android:clickable="true"
            android:focusable="true"
            android:layout_height="55dp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            android:layout_marginTop="45dp"
            android:background="@color/colorBlack">

            <ImageView
                android:id="@+id/loginButtonIcon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|center_horizontal"
                android:src="@mipmap/ic_launcher" />

            <TextView
                android:id="@+id/LoginButtonLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|center_horizontal"
                android:text="Login"
                android:textAppearance="@style/FilledLoginButtonTextAppearance" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

【问题讨论】:

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


    【解决方案1】:

    使用TextInputEditText 代替EditText

    EditText 的一个特殊子类,设计用作 TextInputLayout 的子级。

    使用此类允许我们在输入时在 IME 中显示提示 “提取”模式。

    【讨论】:

      【解决方案2】:

      我认为你必须使用android.support.design.widget.TextInputEditText 而不是EditText

      <android.support.design.widget.TextInputLayout
              android:id="@+id/textInputLayout"
              android:layout_width="match_parent"
              android:layout_height="45dp"
              android:layout_marginEnd="45dp"
              android:layout_marginStart="42dp"
              app:passwordToggleDrawable="@drawable/login_password_eye"
              app:passwordToggleEnabled="true">
      
              <android.support.design.widget.TextInputEditText
                  android:id="@+id/passwordTextField"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:backgroundTint="@color/colorDivider"
                  android:imeOptions="actionDone"
                  android:inputType="textPassword"
                  android:singleLine="true"
                  android:textColor="@color/colorItemMajor"
                  android:textSize="16sp" />
      
       </android.support.design.widget.TextInputLayout>
      

      【讨论】:

      • 尝试将 android:layout_marginTop="0dp" 设置为您的 EditText。
      【解决方案3】:

      我想你会在布局预览中看到这一点。编译它然后尝试运行 您会看到它的工作原理。这个差距是因为你使用浮动编辑 文本。 ——哈温德·辛格

      成功了!

      【讨论】:

        【解决方案4】:

        这是我与您的问题相关的代码,它在项目中正常工作。用你自己的方式试试这个 别忘了发表评论。

               <android.support.design.widget.TextInputLayout
                    android:id="@+id/input_Layout_Signup_Password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/input_Layout_Signup_Phone"
                    app:passwordToggleEnabled="true"
                    app:passwordToggleTint="@color/colorAccent"
                    android:layout_margin="5dp">
        
                    <android.support.design.widget.TextInputEditText
                        android:id="@+id/input_Signup_Password"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Password"
                        android:layout_marginRight="10dp"
                        android:inputType="textPassword"
                        android:singleLine="true" />
                </android.support.design.widget.TextInputLayout>
        

        【讨论】:

        • 嘿,发送你的整个 xml 文件然后我看到并给你解决方案
        • 发给我你的布局 xml 代码的照片可能是在看到你的 xml 之后写的。我给你解决方案
        • 我想你会在布局预览中看到这个。编译它尝试运行然后你会看到它的工作gud。这个差距是因为您使用浮动编辑文本。
        • 如果你有解决方案,请给予检查权并投票
        【解决方案5】:

        为 TextInputLayout 添加底部填充

        android:paddingBottom="11dp"
        

        【讨论】:

          【解决方案6】:

          因为你已经完成了 TextInputLayout 来修复

           android:layout_height="45dp"
          

          请改成 wrap_content

          【讨论】:

          • 我这样做是为了降低实际高度,因为 wrap_content 使它更高。但是当我使用 wrap_content 时,差距仍然存在 + 它不会解决我的差距问题
          猜你喜欢
          • 1970-01-01
          • 2021-07-14
          • 1970-01-01
          • 2019-01-11
          • 2023-02-05
          • 2016-05-08
          • 2017-06-13
          • 1970-01-01
          • 2015-12-20
          相关资源
          最近更新 更多