1. 点击屏幕其他地方让edittext失去焦点 的实现
方法就是:让EditText所在的layout获得焦点。
给layout注册OnTouchListener监听器
直接使用 .requestFocus() 无法获取焦点,焦点依然在EditTtext上
先调用下面这两个方法:
.setFocusable(true);
.setFocusableInTouchMode(true);
再调用 .requestFocus() 就可获取焦点
//必须
relative.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {
relative.setFocusable(true);
relative.setFocusableInTouchMode(true);
relative.requestFocus();
return false;}
});
// 失去焦点触发
eidt.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean arg1) {
if (remove_btn.hasFocus() == false) {
//失去焦点时做某事
}
}
}
2.关于EditText的焦点问题(默认进入不弹出键盘)
父控件设置下面属性,拦截焦点即可
- android:focusable="true"
- android:focusableInTouchMode="true"
3.过滤表情符的输入
EditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(
length) ,emjorFilter});// 设置输入最大字符数
// 过滤输入法表情
public InputFilter emjorFilter = new InputFilter() {
Pattern emoji = Pattern
.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff ]",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart,int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
return "";
}
return null;
}
};
4.允许多行输入,禁止输入时回车换行
EditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
// TODO Auto-generated method stub
return (arg2.getKeyCode() == KeyEvent.KEYCODE_ENTER);
}
});