1.自定义文本框
选中状态: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!--指定形状内部颜色--> <solid android:color="#ffffff"> </solid> <!--指定形状轮廓的粗细与颜色--> <stroke android:width="1dp" android:color="#0000ff"> </stroke> <!--指定圆角半径--> <corners android:radius="5dp"/> <!--指定上下左右间距--> <padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"> </padding> </shape>
未选中状态:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!--指定形状内部颜色--> <solid android:color="#ffffff"> </solid> <!--指定形状轮廓的粗细与颜色--> <stroke android:width="1dp" android:color="#aaaaaa"> </stroke> <!--指定圆角半径--> <corners android:radius="5dp"/> <!--指定上下左右间距--> <padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"> </padding> </shape>
2.定义文本框
<EditText android:id="@+id/ed1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/et1" android:text="请输入名字"> </EditText> <EditText android:id="@+id/ed2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/edittext_selector" android:inputType="textPassword" android:maxLength="11" android:hint="请输密码"> </EditText> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:gravity="end" android:text="用户:"> </TextView> <EditText android:id="@+id/ed3" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:hint="请输入手机号码" android:inputType="number" android:maxLength="11"> </EditText> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:gravity="end" android:text="密码:"> </TextView> <EditText android:id="@+id/ed4" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:hint="请输入验证码" android:maxLength="6" android:inputType="numberPassword"> </EditText> </LinearLayout>
3.焦点监听
editText3 = findViewById(R.id.ed3); //焦点监听 editText3.setOnFocusChangeListener(this::onFocusChange);private void onFocusChange(View view, boolean b) { if(b){ String phone = editText3.getText().toString(); Log.d("用户账号数据:", "onFocusChange: "+phone); //手机号码不足11位 if(TextUtils.isEmpty(phone)||phone.length()<11){ //手机号码编辑框请求焦点,把光标移回手机号码编辑框 editText3.requestFocus(); Log.d("用户账号数据:", "手机号码不足11位!!! "); Toast.makeText(this, "手机号码不足11位", Toast.LENGTH_SHORT).show(); } } }
4.当输入达到最大值,关闭键盘
editText3 = findViewById(R.id.ed3); editText4 = findViewById(R.id.ed4);
//文本变化监听 editText3.addTextChangedListener(new HideTextWatcher (editText3,11)); editText4.addTextChangedListener(new HideTextWatcher (editText4,6));
/** * 自定义文本变化监听类 */ private class HideTextWatcher implements TextWatcher{ private EditText mView; private int mMaxLenth; //定义一个构造方法 public HideTextWatcher(EditText v, int maxLenth) { this.mView = v; this.mMaxLenth = maxLenth; } //改变之前 @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } //改变中 @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } //改变之后 @Override public void afterTextChanged(Editable s) { //获取输入文本 String str = s.toString(); //输入文本达到最大数,关闭输入法 if(str.length()==mMaxLenth){ ViewUitl.hideOneInputMethod( MainActivity3.this,mView); } } }
5.自定义关闭键盘工具类
public class ViewUitl { /** * 关闭键盘 * @param act * @param v */ public static void hideOneInputMethod(Activity act, View v) { //从系统获取输入法 InputMethodManager imm =(InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); //关闭键盘 imm.hideSoftInputFromWindow(v.getWindowToken(),0); } }