Android EditText控件完美实现只读(Read-Only/Non-Editable)

Android EditText控件完美实现只读(Read-Only/Non-Editable)

很多朋友困惑于EditText控件的read-only问题, 包括我. Read-only在这里的定义等同于win32 edit控件的read-only, 即: 无法通过UI更改其中的内容, 但可以选定部分内容, 进行复制.

在早期的sdk, EditText有Editable属性(至于这个属性是否有用, 没有测过, 本人入门较晚, 没使用过早期sdk), 现在这个属性已经deprecated了.  网上有大量关于此问题的内容,  要么是掩耳盗铃式的设成non-focusable, 要么是复杂的TextWatch, 始终没有发现简洁完美的方法. 当初曾被此问题折腾得够呛, 甚至用WebView替代过. 其实只需一行代码就能搞定

et.setKeyListener(null);

注意, 这里不是setOnKeyListener, 而是setKeyListener. 此方法是TextView的成员, 调用后的效果完全符合预期, 并且获得焦点后不会弹出输入法. 下面是官方文档的解释

Sets the key listener to be used with this TextView. This can be null to disallow user input. Note that this method has significant and subtle interactions with soft keyboards and other input method: see KeyListener.getContentType() for important details. Calling this method will replace the current content type of the text view with the content type returned by the key listener.

Be warned that if you want a TextView with a key listener or movement method not to be focusable, or if you want a TextView without a key listener or movement method to be focusable, you must call setFocusable again after calling this to get the focusability back the way you want it.

 

我想, 这也应该是官方方法了, 纳闷为啥网上搜不出来这种解决方法.

另外, setOnKeyListener其实也是可以的

et.setOnKeyListener(new OnKeyListener() {
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    return true;
  }
}); //consume key input
et.setInputType(InputType.TYPE_NULL);//禁止输入法

这种方法只经过粗略测试, 无法确定是否与前一种等价. 既然已经有完美方法了, 忘了它吧.

转载于:https://www.cnblogs.com/pengqinping/archive/2012/07/12/2588427.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值