输入法删除退格键的冲突问题解决
/** *返回键处理 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if( event.getKeyCode() == KeyEvent.KEYCODE_BACK) { this.finish(); return true; } return false; }
import
android.app.Activity;
import
android.view.KeyEvent;
import
android.view.View;
import
android.view.View.OnKeyListener;
import
android.widget.EditText;
public
class
BackKeyListener
implements
OnKeyListener {
private
EditText text;
public
BackKeyListener(Activity act) {
text =
new
EditText(act);
//text = (EditText) act.findViewById(R.id.text);
text.setOnKeyListener(
this
);
//注册按键监听器
}
@Override
public
boolean
onKey(View v,
int
arg1, KeyEvent e) {
if
(v.equals(text) && e.getKeyCode() == KeyEvent.KEYCODE_BACK) {
//doSomething();
}
return
false
;
}
}
是因为重写了OnKeyDown方法跟输入法退格键冲突的原因。但我也遇到这个问题,知道原因却无从下手。在登录的输入框,肯定要写BACK键是后退方法也需要在输入的内容出错的时候,使用删除键。实在没头绪。有解决问题了的朋友么。
我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Override
public
boolean
dispatchKeyEvent(KeyEvent event) {
if
(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
/*隐藏软键盘*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if
(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(MainActivity.
this
.getCurrentFocus().getWindowToken(),
0
);
}
edittext.setText(
"success"
);
webview.loadUrl(URL);
return
true
;
}
return
super
.dispatchKeyEvent(event);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private
OnKeyListener onKeyListener =
new
OnKeyListener() {
@Override
public
boolean
onKey(View v,
int
keyCode, KeyEvent event) {
if
(keyCode == KeyEvent.KEYCODE_ENTER){
/*隐藏软键盘*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if
(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(),
0
);
}
edittext.setText(
"success"
);
webview.loadUrl(URL);
return
true
;
}
return
false
;
}
};
|
1
|
edittext.setOnKeyListener(onKeyListener);
|
第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
edittext.setOnEditorActionListener(
new
TextView.OnEditorActionListener() {
@Override
public
boolean
onEditorAction(TextView v,
int
actionId, KeyEvent event) {
/*判断是否是“GO”键*/
if
(actionId == EditorInfo.IME_ACTION_GO){
/*隐藏软键盘*/
InputMethodManager imm = (InputMethodManager) v
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
if
(imm.isActive()) {
imm.hideSoftInputFromWindow(
v.getApplicationWindowToken(),
0
);
}
edittext.setText(
"success"
);
webview.loadUrl(URL);
return
true
;
}
return
false
;
}
});
|
1
|
<edittext android:id=
"@+id/edittext"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:singleline=
"true"
android:imeoptions=
"actionSearch"
></edittext>
|
我在写这个demo的时候,发现了webview的一个问题,就是直接使用webview.load(url)方法会在手机上面弹出系统浏览器来访问url链接,而不是我们设置的webview,我找到的解决办法就是使用webview.setWebViewClient(....)的方法来确保url会在activity的webview上面加载。