EditText使用小技巧

Posted by 程序亦非猿 on 2016-05-04

设置回车/send/..

通过setImeOptions(EditorInfo.IME_ACTION_SEND) 方法我们可以设定输入法的Action,即经常看到的Enter/Send/回车等.

屏蔽长按事件

长按EditText会弹出复制/黏贴等功能栏,而Android自带的界面很丑,而且会挤压我们的UI(MIUI的不会),所以我们需要屏蔽它:

实现ActionMode.Callback接口

onCreateActionMode方法返回false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private class MyActionModeListener implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
}

通过setCustomSelectionActionModeCallback设置

1
mEdtInput.setCustomSelectionActionModeCallback(new MyActionModeListener());//屏蔽长按事件

对话框中有ET,弹不出输入法

当我们需要弹出一个有EditText的同时,弹出输入法,我们需要做如下处理:

1
2
3
4
5
6
7
8
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
InputMethodManager inputMethodManager = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);//用 SHOW_FORCED 来打开的话 对话框消失后输入法不会自己消失
}
});

焦点问题

清除焦点

1
2
3
mEdtNick.clearFocus();
mEdtNick.setFocusableInTouchMode(false);
mEdtNick.setFocusable(false);

重新能够获取焦点

1
2
mEdtNick.setFocusable(true);//光这句不行 点击之后不能输入
mEdtNick.setFocusableInTouchMode(true);//

动态修改drawable

1
2
3
4
5
Drawable right = getResources().getDrawable(R.drawable.bg_change_name);
//setbounds 不能少
right.setBounds(0,0,right.getIntrinsicWidth(),right.getIntrinsicWidth());
//l t r b
mEdtNick.setCompoundDrawables(null,null,right,null);