【问题标题】:TextInputLayout password toggle moves text from centerTextInputLayout 密码切换从中心移动文本
【发布时间】:2018-02-11 13:35:50
【问题描述】:

在使用带有app:passwordToggleEnabled="true" EditText 的TextInputLayout 时,文本重力没有很好地居中,如图所示。有什么帮助吗?

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

    <EditText
        android:gravity="center"
        android:id="@+id/passwordEt"
        style="@style/editTextStyle"
        android:layout_marginBottom="20dp"
        android:hint="@string/password"
        android:inputType="textPassword" />

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

对于文字样式

<style name="editTextStyle">

    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">50dp</item>
    <item name="android:layout_margin">8dp</item>
    <item name="android:background">@drawable/text_fields</item>
    <item name="android:padding">15dp</item>
</style>

【问题讨论】:

  • 你能粘贴你的代码吗,你做了什么。
  • 之所以这样做,是因为切换图标被分配了与该位置的复合可绘制对象相同的空间,然后文本在剩余空间中居中。想到的最简单的解决方案是向左侧的EditText 添加一个可绘制的透明化合物。

标签: android android-layout android-support-library


【解决方案1】:

只需在EditText左侧添加透明drawable即可。

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

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_password_space"
                    android:drawableStart="@drawable/ic_password_space"
                    android:gravity="center" />

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

对于透明可绘制对象,您可以使用 android:width="48dp" 的任何内容。

创建可绘制资源文件@drawable/ic_password_space.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="48dp"
        android:height="1dp"
        android:viewportWidth="1.0"
        android:viewportHeight="1.0">

    <path
        android:pathData="M"
        android:fillColor="#0000"/>
</vector>

【讨论】:

    【解决方案2】:

    如果在editText为空时隐藏passwordToggle,则在编辑文本的两侧添加空的48dp drawable,否则光标最初不会在中心。

    <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:passwordToggleEnabled="true">
    
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableStart="@drawable/ic_password_toggle_space"
                    android:drawableEnd="@drawable/ic_password_toggle_space"
                    android:gravity="center" />
    

    要创建空drawable,您可以在drawable资源中添加一个空白矢量ic_password_toggle_space.xml文件:-

    <?xml version="1.0" encoding="utf-8"?>
    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="48dp"
        android:height="1dp"
        android:viewportWidth="1.0"
        android:viewportHeight="1.0">
    
        <path
            android:pathData="M"
            android:fillColor="#0000"/>
    </vector>
    

    【讨论】:

      【解决方案3】:

      将 left-drawable 添加到内部 EditText 不会生效(至少对于支持 lib.v26.1.0)。

      向内部EditText 添加left-padding 会产生一些效果,但EditText 的内容仍然无法正确居中 - 无论您将使用什么值进行填充。

      我找到的唯一可行的解​​决方案(子类化或使用第 3 方库除外) - 将否定的 drawablePadding 添加到 EditText。所以在 xml 中它看起来像:

      android:drawablePadding="-48dp"
      

      但这有点老套,因为InputTextLayout 的实现将来可能会改变。因此,使用它需要您自担风险。

      【讨论】:

        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 2020-05-19
        • 2017-04-27
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多