1. 程式人生 > >Android EditText裡的密碼顯示可見與不可見

Android EditText裡的密碼顯示可見與不可見

剛開始我是修改EditText的inputType,這個就是EditText的輸入模式。我之前也是想修改這個inputType的,這個在xml裡面修改可以,程式碼是這樣的:android:inputType=”textPassword”(密碼不可見)android:inputType=”textVisiblePassword”( 可見密碼) 有兩種模式。但是想在java程式碼裡面動態修改貌似改顯示與不可見,貌似只能從可見模式轉為可見模式,但是轉不回去。若有大神可以從可見模式轉為不可見模式的告訴我哈,我也學習學習-_-程式碼如下:

  • 動態修改inputType
    //從密碼不可見模式變為密碼可見模式(行得通)
    et_password.setInputType
(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); //從密碼可見模式變為密碼不可見模式(行不通) et_password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

我也閱讀InputType裡面的原始碼,也沒發現inputType從密碼不可見模式可以轉為可見模式
inputType裡面的部分原始碼說明如下如下:

    /**
     * Variation of {@link #TYPE_CLASS_TEXT}: entering a password, which should
     * be visible to the user.
     */
public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090; /** * Variation of {@link #TYPE_CLASS_TEXT}: entering a password. */ public static final int TYPE_TEXT_VARIATION_PASSWORD = 0x00000080;
  • 解決方法 動態修改TransformationMethod
    //從密碼不可見模式變為密碼可見模式
    et_password.setTransformationMethod
(HideReturnsTransformationMethod.getInstance()); //從密碼可見模式變為密碼不可見模式 et_password.setTransformationMethod(PasswordTransformationMethod.getInstance());

下面來一個小demo

效果圖:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

  • xml佈局檔案 一個線性佈局裡面左右各方一個ImageButton,中間放一個EditText,圖片自己找喔
    <!--請輸入密碼-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/login_background"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="20dp"
            android:layout_height="25dp"
            android:layout_marginLeft="10dp"
            android:src="@drawable/icon_coupon" />

        <EditText
            android:id="@+id/et_password"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:hint="@string/input_password"
            android:imeOptions="actionDone"
            android:inputType="textPassword"
            android:paddingLeft="5dp"
            android:textColor="@color/black"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/iv_eye"
            android:layout_width="20dp"
            android:layout_height="25dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:src="@drawable/icon_eye" />
    </LinearLayout>
  • 上面的LinearLayout的background com_btn_background.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--描邊-->
    <stroke
        android:width="1.0dp"
        android:color="#ededed" />

    <!--填充顏色-->
    <solid android:color="#ffffff" />

</shape>
  • LinearLayout右邊的圖片有一個選擇器selector icon_eye.xml如下(圖片自己找哈):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/icon_eye_closs" android:state_selected="false" />
    <item android:drawable="@drawable/icon_eye_show" android:state_selected="true" />

</selector>
  • java程式碼如下:

    private EditText et_password;
    private ImageView ivEye;
    private boolean isOpenEye = false;
    //繫結id
    et_password = (EditText) v.findViewById(R.id.et_password);
    ivEye = (ImageView) v.findViewById(R.id.iv_eye);

    //密碼是否可見
    ivEye.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!isOpenEye) {
                    ivEye.setSelected(true);
                    isOpenEye = true;
                    //密碼可見
                    et_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }else{
                    ivEye.setSelected(false);
                    isOpenEye = false;
                    //密碼不可見
                    et_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
                }
            }
        });

程式碼都是部分片段,看懂的同學們自己補充哈-_-