TextInputLayout密码切换从中心移动文本

时间:2018-02-11 13:35:50

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

将TextInputLayout与app:passwordToggleEnabled="true" EditText文本一起使用时,重力不能很好地居中,如照片中所示。有什么帮助吗?

 <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>

enter image description here

3 个答案:

答案 0 :(得分:4)

只需在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>

答案 1 :(得分:1)

将left-drawable添加到内部id brand any_value_of_x_true 1 Bmw true 2 Audi false 3 VW false 将不会生效(至少与支持lib.v26.1.0一样)。

向内部EditText添加左边距会产生一些影响,但EditText的内容仍然无法正确居中 - 无论你将使用什么值进行填充。

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

EditText

但它有点hacky,因为android:drawablePadding="-48dp" 的实施可能会在未来发生变化。因此,使用它需要您自担风险。

答案 2 :(得分:0)

如果隐藏密码,则在编辑文本的两边上添加空的48dp可绘制对象,当editText为空时切换。否则,光标最初不会居中。

<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" />

要创建空的可绘制对象,可以在可绘制资源中添加一个空白矢量 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>