android输入框不可编辑,android中控制EditText不可编辑的问题

本文介绍了如何在Android中控制EditText的可编辑性。通过尝试不同的方法,如在XML设置android:editable,使用setFocusable和setEnabled,最终找到结合setFocusableInTouchMode并配合InputFilter的解决方案,来实现EditText在运行时动态切换编辑状态。然而,还发现了一个问题:在不可编辑状态下,长按仍能进行粘贴操作,但未给出解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先想到在xml中设置android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数

2、然后尝试使用editText.setFocusable(false);和editText.setEnabled(false);设置不可编辑状态;editText.setFocusable(true);和 editText.setEnabled(true);设置可编辑状态。

发现在editText.setFocusable(false);和editText.setEnabled(false);时不可编辑,但是editText.setFocusable(true);和 editText.setEnabled(true);也是不可编辑的,感觉这个时候EditText控件高亮度了,但是没有焦点

3、最后尝试使用editText.setFocusable(false);和editText.setFocusableInTouchMode(false);设置不可编辑状态;editText.setFocusableInTouchMode(true);editText.setFocusable(true);editText.requestFocus();设置可编辑状态

这个可以实现可编辑和不可编辑,但是又发现一个问题,在不可编辑状态如果常按住控件,可以进行粘帖操作,不知道怎么可以不能进行粘帖啊

最终解决方案:

把控件和是否可编辑传入后,就可以实现控制输入框编辑状态。

private void isEdit(boolean value, EditText editText) {

if (value) {

editText.setFocusable(true);

editText.setFocusableInTouchMode(true);

editText.setFilters(new InputFilter[] { new InputFilter() {

@Override

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

return null;

}

} });

} else {

//设置不可获取焦点

editText.setFocusable(false);

editText.setFocusableInTouchMode(false);

//输入框无法输入新的内容

editText.setFilters(new InputFilter[] { new InputFilter() {

@Override

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

return source.length() < 1 ? dest.subSequence(dstart, dend) : "";

}

} });

}

}

参考来源:http://blog.youkuaiyun.com/wuxianglong/article/details/6336406

http://blog.youkuaiyun.com/luliyuan/article/details/8065447

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值