Android自定義密碼輸入框(可顯示或隱藏)

先上效果圖

1.首先在layout下新建xml文件 view_pas_edittext

主要控件爲EditText和Button,其中Button存放閉眼的圖片,其他樣式自定(閉眼和眼睛兩張圖片可在阿里圖標下載)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@color/white">
        <EditText
            android:id="@+id/et_view"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_weight="4"
            android:background="@null"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="#0e0e0e"
            android:textColorHint="#b0c6ce"
            android:textSize="14sp" />

        <Button
            android:id="@id/bt_show"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_gravity="right|center_vertical"
            android:layout_margin="10dp"
            android:padding="5dp"
            android:background="@drawable/hide_pas" />
    </LinearLayout>

</LinearLayout>

2.新建CustomizePasEditText繼承LinearLayout,實現View.onClickListener接口

public class CustomizePasEditText extends LinearLayout implements View.OnClickListener {
    private EditText editText;
    private Button showButton;
    //true爲隱藏,false爲顯示
    private boolean mode = true;

//設置提示文字
    public void setEditTextHint(String hint){
        if(editText!=null){
            editText.setHint(hint);
        }
    }
//獲得輸入框文字
    public String getText(){
        return editText.getText().toString();
    }

    public CustomizePasEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.view_edittext,this,true);
        editText = findViewById(R.id.et_view);
        
       //一開始密碼是隱藏的,因此一開始使用閉眼圖片,並且將EditText的輸入類型設置爲密碼(不可見)
        showButton= findViewById(R.id.bt_show);
        showButton.setBackgroundResource(R.drawable.hide_pas);
        editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        showButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //當點擊了顯示/隱藏按鈕,則改變editText的文字顯示方式
        switch (v.getId()){
            case R.id.bt_show:
                //從隱藏變顯示
                if(mode){
                                  editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                    //爲了點擊之後輸入框光標不變
                    editText.setSelection(editText.getText().length());
                    showButton.setBackgroundResource(R.drawable.show_pas);
                    mode = !mode;
                }else {
                    editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                      //爲了點擊之後輸入框光標不變
                    editText.setSelection(editText.getText().length());
                    showButton.setBackgroundResource(R.drawable.hide_pas);
                    mode = !mode;
                }
                break;
        }
    }

//獲得輸入框內容
    public EditText getEditText(){
        return editText;
    }
}

3.在activity中使用

首先在activity的xml中調用該控件

<com.xx.xx.customUI.CustomizePasEditText
                android:id="@+id/ed_pas"
                android:layout_width="match_parent"
                android:layout_height="@dimen/control_big_margin"
                android:textColorHint="@color/light_gray"
                android:hint="@string/ed_hint_pas"
                android:background="@null"
                android:padding="10dp"
                android:textColor="@color/black"
                android:inputType="textPassword"
                android:lines="1"
                android:maxLength="16"/>

然後在代碼中使用

//註冊綁定
CustomizePasEditText pasEditText; 

pasEditText = findViewById(R.id.ed_pas);
pasEditText.setEditTextHint(getResources().getString(R.string.ed_hint_pas));

//獲得輸入內容
String pas = pasEditText.getText();

注意,如果要動態改變輸入框樣式,需在CustomizePasEditText中編寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章