使用show password按钮设计密码文本

时间:2016-08-22 14:00:45

标签: android xml android-edittext imageview

我正在尝试使用show password imageView为密码设计EditText。但是我无法正确设计,因为ImageView,我无法看到EditText's layout_width="fill_parent"。当我将其更改为wrap_content时,我可以看到我的ImageView,但在UI中看起来非常糟糕。是否可以设计它而不给出固定的尺寸?

这是我的代码;

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:orientation="horizontal"
            android:layout_marginBottom="8dp">

            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="horizontal">

            <EditText
                android:id="@+id/registerPassword"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="@string/register_password"
                android:inputType="textPassword" />
            <ImageView
                android:id="@+id/fragment_login_password_visibility"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:src="@android:drawable/ic_partial_secure"
                android:layout_gravity="center"
                android:clickable="true"/>

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

编辑:

android:layout_weight = 1解决了问题。现在我可以在EditText左侧看到ImageView。但是现在,我的TextInputLayout提示不起作用。

Here Hint works

Here Hint does not works

5 个答案:

答案 0 :(得分:4)

您不需要使用ImageView。

支持库在recent update(版本24.2.0 - 2016年8月)中添加了对密码可见性切换的支持。

试一试:

  

setPasswordVisibilityToggleDrawable(int resId)

     

设置用于密码可见性切换按钮的图标。

https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html

答案 1 :(得分:0)

你尝试过使用体重吗?

android:layout_weight="1"

android:layout_width="0dp"android:layout_width="wrap_content"

   <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:orientation="horizontal"
        android:layout_marginBottom="8dp">

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal">

        <EditText
            android:id="@+id/registerPassword"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="@string/register_password"
            android:inputType="textPassword" />

        <ImageView
            android:id="@+id/fragment_login_password_visibility"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@android:drawable/ic_partial_secure"
            android:layout_gravity="center"
            android:clickable="true"/>

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

答案 2 :(得分:0)

首先将android:weightSum的{​​{1}}设置为&#34; 1&#34;。然后,将LinearLayout的{​​{1}}和android:layout_width设置为&#34; 0dp&#34;和&#34; 1&#34;分别。

答案 3 :(得分:0)

试试这个:

 <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <EditText
                android:id="@+id/editText"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="Password"
                android:singleLine="true"
                android:textSize="25sp"
                android:paddingRight="60dp"
                />
            <ImageButton
                android:id="@+id/showpass"
                android:layout_marginLeft="-60dp"
                style="?android:buttonBarButtonStyle"
                android:paddingBottom="5dp"
                android:src="@drawable/pass_ic"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

答案 4 :(得分:0)

我建议使用带有passwordToggleDrawable的TextInputLayout。

  <android.support.design.widget.TextInputLayout
            android:id="@+id/textInputPasswordLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:passwordToggleContentDescription="Show" 
            app:passwordToggleDrawable="@drawable/ic_password_visibility_selector"
            app:passwordToggleEnabled="true">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/textInputEditTextPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:fontFamily="sans-serif-light"
                android:gravity="bottom"
                android:hint="@string/enter_your_password"/>


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

app:passwordToggleDrawable="@drawable/ic_password_visibility_selector" 分配您的drawable