先上效果圖
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中編寫