标签:http dma ted ati ber str undle declared 命名空间
1.概述
1) 给LinearLayout 注册click 事件,点击后隐藏输入法软键盘。为什么要叫软键盘,很奇怪呢。通过Activity 的getSystem(Context.INPUT_METHOD_SERVICE) 获取到输入法的对象,接着把它隐藏掉。
2) EditText 输入的字符达到最大值时隐藏输入法软键盘。注册EditText 的TextWatcher 事件,通过判断输入的字符数达到最大长度时隐藏掉输入法软键盘。
2.Activity 后台代码
public class EditHideActivity extends AppCompatActivity implements View.OnClickListener { private LinearLayout ll_hide; private EditText et_phone; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_hide); ll_hide = (LinearLayout) findViewById(R.id.ll_hide); et_phone = (EditText) findViewById(R.id.et_phone); //给LinearLayout 注册click 监听,点击后隐藏输入法 ll_hide.setOnClickListener(this); //给EditText 注册TextChanged 监听,文本的变化会触发监听事件 et_phone.addTextChangedListener(new HideTextWatcher(et_phone)); } //实现OnClickListener 的onClick 事件 @Override public void onClick(View view) { if (view.getId() == R.id.ll_hide) { hideOneInputMethod(EditHideActivity.this, et_phone); } } private void hideOneInputMethod(Activity act, View v) { //实际上不只是et_other的软键盘会关闭,其它编辑框的软键盘也会关闭 //因为方法内部去获取视图的WindowToken,这个Token在每个页面上都是唯一的 InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } private void hideAllInputMethod(Activity act) { InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive() == true) { imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } //获取EditText 最大长度 private int getMaxLength(EditText et) { int length = 0; try { InputFilter[] inputFilters = et.getFilters(); //遍历所有过滤器 for (InputFilter filter : inputFilters) { Class<?> c = filter.getClass(); //是否有InputFilter$LengthFilter 过滤器 if (c.getName().equals("android.text.InputFilter$LengthFilter")) { //Field 的命名空间为: java.lang.reflect.Field Field[] f = c.getDeclaredFields(); //遍历过滤器的所有字段 for (Field field : f) { if (field.getName().equals("mMax")) { field.setAccessible(true); length = (Integer) field.get(filter); } } } } } catch (Exception ex) { ex.printStackTrace(); } return length; } private class HideTextWatcher implements TextWatcher { private CharSequence mStr; private EditText mView; private int mMaxLength; //通过构造函数注入要监听的EditText,持有EditText 便于事件里的操作 public HideTextWatcher(EditText v) { super(); mView = v; //获取EditText 的最大长度 mMaxLength = getMaxLength(v); } //CharSequence charSequence:文本改变之前的内容 //int i:文本开始改变时的起点位置,从0开始计算 //int i1:要被改变的文本字数,即将要被替代的选中文本字数 //int i2:改变后添加的文本字数,即替代选中文本后的文本字数 @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } //CharSequence charSequence:文本改变之后的内容 //int i:文本开始改变时的起点位置,从0开始计算 //int i1:要被改变的文本字数,即已经被替代的选中文本字数 //int i2:改变后添加的文本字数,即替代选中文本后的文本字数 @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { mStr = charSequence; } //Editable editable: 改变后的最终文本 @Override public void afterTextChanged(Editable editable) { if (mStr == null || mStr.length() == 0) { return; } else if (mStr.length() == mMaxLength) { //输入的字符达到最大时,隐藏输入法 hideAllInputMethod(EditHideActivity.this); } } } }
3.layout 布局文件代码
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" tools:context="com.example.administrator.middledemo.EditHideActivity"> <LinearLayout android:id="@+id/ll_hide" android:layout_width="368dp" android:layout_height="495dp" android:orientation="vertical" tools:layout_editor_absoluteY="8dp" tools:layout_editor_absoluteX="8dp"> <View android:layout_width="match_parent" android:layout_height="20dp" /> <EditText android:id="@+id/et_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:maxLength="11" android:inputType="number" style="@style/text_normal"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
标签:http dma ted ati ber str undle declared 命名空间
原文地址:http://www.cnblogs.com/mojo/p/7412806.html