android 中使用setOnKeyListener无法监听按键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 中使用setOnKeyListener无法监听按键相关的知识,希望对你有一定的参考价值。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
public class activity1 extends Activity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText etMail = (EditText)findViewById(R.id.etMail);
etMail.setOnKeyListener(new OnKeyListener()
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
// TODO Auto-generated method stub
//System.out.println(v + " ++ " + keyCode + "++" + event);
EditText etInfo = (EditText)findViewById(R.id.etInfo);
//EditText etMail = (EditText)findViewById(R.id.etMail);
etInfo.setText("您输入的邮箱地址:" + etMail.getText());
Log.v("activity1", "v = " + v.toString());
Log.v("activity1", "keyCode = " + keyCode);
Log.v("activity1", "event = " + event.toString());
return false;
);
输入后无法实时输出,当碰到导航键或back后,才可以输出,在网上看到有人也有这种问题,可是大部分都说可以实现实时监控,等待高手解惑...
一定高分!
layout太多了,贴不出来,这个应该没什么问题
请写在外面追问
我这里的问题不是回调不止一次,而是根本没有调用,输入后只有按了back或导航键,log才能打出来!
追答建议你debug跟进去
追问我按字母的时候没有输出,当然输入信息也没有在下面打出来,按右方向键keycode=22,也就是说OnKeyListener不能监听字母按键?
本回答被提问者采纳 参考技术C 有的key是监听不了的,像home 参考技术D 使用setOnKeyListener()这种方式只能监听硬键盘事件 第5个回答 2012-03-19 楼主,问题解决了吗?我现在也碰到同样的问题,纠结的是我本来可以实现输入输出同步的,但再次启动后,输入信息必须按下back或导航键才有输出。跪求楼主相助。Android如何检测“删除”按钮按键盘上删除单个字符?
我正在开发一个远程控制应用程序,需要检测用户何时按下空文本字段上的<x
删除按钮以发送此字符并从远程计算机中删除某些内容。
如何检测用户按下Android键盘上的<x
删除按钮?
我试图在关键监听器上做广告,但这似乎不起作用。
final EditText edittext = (EditText) findViewById(R.id.editText);
edittext.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
Log.i("KEYCODE", "" + keyCode);
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
return false;
} else if (edittext.length() == 0) {
if(keyCode == KeyEvent.KEYCODE_DEL) {
//perform erase when the text field is empty
}
}
return false;
}
});
我知道我迟到了,但希望这能帮助别人。使用监听器没有直接的方法可以做到这一点,但如果你查看onTextChanged Listener的文档,你会发现:
调用此方法是为了通知您,在s中,从start开始的计数字符刚刚替换了之前具有长度的旧文本。
因此,如果退格,您将遇到以下情况:
在s(可编辑视图)中,从开始处开始的0个字符(取决于光标所在的位置)已经替换了之前具有长度的旧文本(它的值通常为1,除非用户首先选择一些文本,然后点击退格)
因此,如果count == 0,您可以假设已按下删除键。
您不能将View.OnKeyListener
用于软件键盘。
View.OnKeyListener:
将硬件键事件调度到此视图时要调用的回调的接口定义。这仅适用于硬件键盘;软件输入方法没有义务触发此监听器。
资料来源:http://developer.android.com/reference/android/view/View.OnKeyListener.html
使用方法DispatchKeyEvent:
@Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
// ...
}
return super.dispatchKeyEvent(event);
}
以上是关于android 中使用setOnKeyListener无法监听按键的主要内容,如果未能解决你的问题,请参考以下文章
android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决