实现功能
以上代码可实现功能:
1 自定义文本框样式
2. 文本框触发形式转变
3. 文本框输入长度监听,达到最大长度关闭软键盘
4. password框触发检测phone框内容
1. drawable自定义形状
我创建了editor_focus.xml 和 editor_unfocus.xml,两者仅边界颜色不同
editor_focus.xml代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!-- 指定文本框内部颜色--><solid android:color="#ffffff" /><!-- 声明边界线颜色--><strokeandroid:width="1dp"android:color="#0000ff" /><!-- 使用圆角--><corners android:radius="5dp" /><!-- 指定形状四个方向的间距--><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /></shape>
editor_unfocus.xml代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!-- 指定文本框内部颜色--><solid android:color="#ffffff" /><!-- 声明边界线颜色--><strokeandroid:width="1dp"android:color="#888888" /><!-- 使用圆角--><corners android:radius="5dp" /><!-- 指定形状四个方向的间距--><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /></shape>
2. drawable自定义selector
selector的作用为不同的触发事件,编辑框有不同的形式。创建过程和上述shape创建过程类似,只是将shape改为 selector即可。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/editor_focus" android:state_focused="true" /><item android:drawable="@drawable/editor_unfocus" />
</selector>
3. 创建 empty Activity
4.设置layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/et_phone"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/editor_selector"android:hint="请输入电话号码"android:maxLength="11"android:inputType="text"android:layout_marginTop="5dp"/><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/editor_selector"android:hint="请输入密码"android:maxLength="6"android:inputType="textPassword"android:layout_marginTop="5dp"/></LinearLayout>
5.Java代码
Activity
package com.example.learn;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import com.example.learn.utils.ViewUtil;public class EditerHideActivity extends AppCompatActivity implements View.OnFocusChangeListener{private EditText et_phone;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_editer_hide);et_phone = findViewById(R.id.et_phone);EditText et_password = findViewById(R.id.et_password);//设置Text changeListeneret_phone.addTextChangedListener(new HideTextWatch(et_phone,11));et_password.addTextChangedListener(new HideTextWatch(et_password,6));//设置password框focus时对phone自动检测et_password.setOnFocusChangeListener(this);}@Overridepublic void onFocusChange(View view, boolean b) {//如果获取聚焦if(b){String str = et_phone.getText().toString();if(!"".equals(str) && str.length()<11){et_phone.requestFocus();Toast.makeText(this,"电话号码不足11位",Toast.LENGTH_SHORT).show();}}}private class HideTextWatch implements TextWatcher {private EditText mView;private int maxLen;public HideTextWatch(EditText v, int len) {this.mView = v;this.maxLen=len;}@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {//获取文本框输入的文本String str = editable.toString();//判断是否输入的字符串与maxLen一致//一致则关软键盘if(str.length() == this.maxLen){//EditerHideActivity.this 外部类的 activity//this:HideTextWatchViewUtil.hideKeyboard(EditerHideActivity.this,mView);}}}
}
Util
package com.example.learn.utils;import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;public class ViewUtil {//当输入达到对应长度后 隐藏键盘public static void hideKeyboard(Activity act, View v){//从系统服务中获取输入法管理器InputMethodManager im = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);//将系统输入软件盘隐藏im.hideSoftInputFromWindow(v.getWindowToken(),0);}
}