Android 实现EditText只读

问题描述

先说一下问题,一种比较直观的方式来实现EditText控件只读,不可编辑的方式是,在xml文件中设置"editable"参数,这个在控件的attributes中也有,可以勾选,设置editable=false就可以了,但是

在这里插入图片描述

正如图片所示,现在editable选项已经deprecated(被弃用)了,IDE建议我们用inputType选项来实现这一功能。之所以被弃用是因为有一种更好的方式来实现这一功能,你已经被警告啦!~意思是说如果之后更新的Android studio取消了这一选项的话,你的代码可能会报错了。

(我实在是不明白为什么editable=false这么简单的方式被弃用掉了~(⊙ˍ⊙)?)

解决方案

一、在代码中设置(推荐)

既然editable被弃用了,我们就不要写了。我们可以在代码中,用EditText控件属性来设置它的只读。只需在MainActivity.java(或其他需要写的代码文件中)写下:

EditText.setKeyListener(null);

此外你需要在content_main.xml中相应的EditText控件处添加属性:

android:textIsSelectable="true"

这句代码可以实现相应的EditText控件只读,他不具备输入任何形式文本的功能了。

下面的txtOutput是笔者的一个Multiline Text控件。在这里插入图片描述
xml文件中加入:
在这里插入图片描述

注意

setKeyListener(null)方法会使对文本框的操作全部被否定,也就是说,这样的文本框中的内容无法被复制。但在xml文件中加入的属性textIsSelectable="true"可以解决这一点,使文本可以被全选,复制,粘贴等操作。

如果不加的话,那么就真的只剩下显示功能了。

二、focusable=false

content_main.xml中,找到要设置的EditText控件,并在属性中添加一行:

android:focusable="false"

像这样
在这里插入图片描述

emmmmm,这个方法讲真有点怪,因为它实现的结果,在我的app上,是你可以点击EditText控件,光标也会显示,但是马上光标消失!!可以理解为这行属性使控件不可被聚焦,也就是你刚刚点击,触发了一个聚焦事件,这行属性就把它否决了,反正用起来怪怪的。

这个文本内容同样无法被复制,因为全选操作也是被否定的,他倒是可以粘贴,粘贴的形式跟我们想象的也不一样,比如该文本框原来输出"abc",我们要粘贴"123"的话,理论上我们可以选择粘贴的位置,但由于光标聚焦实现不了了,所以粘贴之后,abc也没了,就剩123了

三、关于inputType

明明Android studio已经建议我们用inputType来实现editable=false这个弃婴了,然鹅,当我们在xml中设置inputType=none时,并没有,什么卵用!我得到的结果,还是和inputType=text一模一样

但inputType中还是有很多选择的,这可以定义文本编辑的方式,使用起来非常灵活
在这里插入图片描述
(笔者把Build框整没了才把所有的inputType属性截图下来!!w(゚Д゚)w)

我真的试过了inputType=none,没有用,真的没有用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值