android edittext setonkeylistener,android中TextView和EditText添加setOnKeyListener的区别

如题在布局文件中分别定义一个TextView和EditText;

TextView tv_text = (TextView)view.findViewById(R.id.choose_text);

EditTextet_text = (EditText)view.findViewById(R.id.edit_text);

分别设置按键监听器,目的是为了实现当输入的数字达到numLength长度后重新显示输入

tv_text.setOnKeyListener(new OnKeyListener()

{

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

TextView vt = (TextView)v;

if(event.getAction()==KeyEvent.ACTION_DOWN)

{

System.out.println("1111");

if ((keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9))

{

if (vt.getText().length() < numLength)

{

vt.setText(vt.getText().toString() + (keyCode - 7) + "");

}

else

{

if (keyCode - 7 > 0)

{

vt.setText((keyCode - 7) + "");

}

}

return true;

}

}

if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||

keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {

return true;

}

// TODO Auto-generated method stub

return false;

}

});

et_text.setOnKeyListener(new OnKeyListener() {

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

EditText vt = (EditText)v;

if(event.getAction()==KeyEvent.ACTION_DOWN)

{

System.out.println("2222");

if ((keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9))

{

if (vt.getText().length() < numLength)

{

vt.setText(vt.getText().toString() + (keyCode - 7) + "");

}

else {

if (keyCode - 7 > 0)

vt.setText((keyCode - 7) + "");

}

return true;

}

}

if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||

keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {

return true;

}

return false;

}

});

原以为上面的代码没什么问题,但是实际运行效果却显示tv.text能够满足需求,但是et.text并没有进入ACTION_DOWN,奇怪的是虽然没有进入上述代码,但是依然能够显示输入(但是没有长度的限制);如果改为监听ACTION_UP出现的问题是虽然能够进入上述代码但是按一次键分别在显示框中的前面和后面添加新输入的数字,比较奇怪。

问题分析(个人猜测):

由于EditText控件本身的特性,系统能够接受按键信息并显示,但是是在ACTION_UP的时候输入一次,后来人为的又输入(setOnKeyListener方法)进去一次,所以会出现两次显示;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值