You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Button与EditText的setOnLongClickListener问题:需不可交互但保持可拖动

问题解决:禁用Button点击、EditText输入但保留长按拖动功能

Button 处理方案

你当前设置setClickable(false)后,Button仍能响应点击,是因为Button的点击行为依赖内部状态管理,仅设置clickable无法完全阻断点击事件。正确做法是保留长按功能的同时,给Button设置空的点击监听器,这样点击操作就不会触发任何逻辑:

// 初始化Button
Button button = new Button(this);
views.add(button);
// 设置长按监听器(用于拖动)
button.setOnLongClickListener(this);
// 设置空的点击监听器,阻断默认点击行为
button.setOnClickListener(v -> {});

EditText 处理方案

当EditText设置setEnabled(false)时,系统会直接拦截所有触摸事件(包括长按),即使手动开启setLongClickable(true)也无效。要实现“不可输入但可长按拖动”,需通过以下组合设置替代setEnabled(false):

// 初始化EditText
EditText editText = new EditText(this);
views.add(editText);
// 设置长按监听器(用于拖动)
editText.setOnLongClickListener(this);
// 禁用输入焦点与编辑能力,但保留触摸事件响应
editText.setFocusable(false);
editText.setFocusableInTouchMode(false);
editText.setInputType(InputType.TYPE_NULL);
// 可选:设置灰色样式,模拟不可用状态
editText.setTextColor(ContextCompat.getColor(this, R.color.grey));
editText.setBackgroundColor(ContextCompat.getColor(this, R.color.light_grey));

这样既让EditText无法被编辑输入,又能正常触发长按事件实现拖动。

内容的提问来源于stack exchange,提问作者Babushka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:50:36