setOnKeyListener事件
范例说明
EditText Widget设计的初衷是为了等待User输入而准备的,那么在User输入的同时,又该如何拦截所输入的文字呢?Android的多数Widget都有setOnKeyListener事件,通过Listener捕捉User输入的键盘事件。
接着,本范例将以EditText与TextView示范如何在捕捉User键盘输入文字的同时实时取得文字,同步显示于TextView,类似手机版的Ajax效果,实时输入实时输出。
<!--[if !vml]-->
范例程序
src/irdc.ex04_01/EX04_01.java
主程序中唯一也同时是最关键之处,便是利用EditText.OnKeyListener来拦截EditText的键盘输入事件,仅需在其中重写onKey()方法,在onKey()方法中,将EditText.getText()取出的文字,显示于TextView当中,是一个简单易懂的范例练习。
/* import程序略 */
import android.view.KeyEvent;
public class EX04_01 extends Activity
{
/*声明 TextView、EditText对象*/
private TextView mTextView01;
private EditText mEditText01;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*取得TextView、EditText*/
mTextView01 = (TextView)findViewById(R.id.myTextView);
mEditText01 = (EditText)findViewById(R.id.myEditText);
/*设置EditText用OnKeyListener事件来启动*/
mEditText01.setOnKeyListener(new EditText.OnKeyListener()
{
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2)
{
// TODO Auto-generated method stub
/*设置TextView显示EditText所输入的内容*/
mTextView01.setText(mEditText01.getText());
return false;
}
});
}
}
扩展学习
这个实时输入实时显示的效果可以扩展到许多手机应用程序中,不妨尝试在OnKey Listener()里做实时文字过滤效果,例如:当User输入不雅的文字时,可以提示User不接受部分关键字。以输入Shit为例,在TextView就会出现:Sh*t,此种做法可以过滤掉不雅文字的出现。
此外,不仅是Widget才具备setOnKeyListener方法重写的功能,事实上,在View里也有View.setOnKeyListener,也就是捕捉User单击键盘时的事件处理,但请特别注意,需拦截这个事件,即View要取得焦点(Focus)才能触发onKeyDown事件。最后提醒你,旧版本当中的View.set KeyListener类已经被删除,1.0r2版之后,已经改用View.setOnKeyListener()方法替换。