zoukankan      html  css  js  c++  java
  • Android EditText控件完美实现只读(ReadOnly/NonEditable)

    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);//禁止输入法

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

  • 相关阅读:
    未来中国最热门的十大职业排行榜
    中国金融牌照18种(内附各牌照注册条件)
    现有的一些人脸数据库
    广信科教集团
    省部级干部list
    解读Google分布式锁服务
    数学算法那些事
    细数二十世纪最伟大的十大算法
    链接分析算法之:HillTop算法
    Regex Failure
  • 原文地址:https://www.cnblogs.com/pengqinping/p/2588427.html
Copyright © 2011-2022 走看看