如何实现Android EditText可点击但不可选文本且光标可见?
解决方案
要实现可输入、显示光标但禁止文本选中的EditText,有两种可靠的实现方式:
方式一:XML属性+代码配置
基于你的现有布局和逻辑,调整属性和代码即可解决光标不显示的问题:
1. 更新XML布局
保留原有属性,新增android:longClickable="false"和android:textIsSelectable="false":
<EditText android:id="@+id/scentenceEditText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="3dp" android:background="@android:color/transparent" android:cursorVisible="true" android:text="EditText" android:textCursorDrawable="@null" android:textSize="24sp" android:longClickable="false" android:textIsSelectable="false" tools:layout_editor_absoluteX="38dp" tools:layout_editor_absoluteY="36dp" />
2. 简化Kotlin代码
在onBindViewHolder中只保留必要的焦点配置,避免属性冲突:
holder.scentenceEditText.apply { isFocusable = true isFocusableInTouchMode = true isClickable = true cursorVisible = true }
方式二:自定义EditText(彻底屏蔽选中)
如果部分机型仍存在双击选中的边缘情况,可通过自定义EditText从底层禁止选中逻辑:
class NoSelectEditText @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.editTextStyle ) : EditText(context, attrs, defStyleAttr) { override fun onTouchEvent(event: MotionEvent?): Boolean { // 确保点击时获取焦点并显示光标,同时屏蔽选中触发逻辑 if (event?.action == MotionEvent.ACTION_DOWN) { requestFocus() cursorVisible = true } return super.onTouchEvent(event) } override fun onTextContextMenuItem(id: Int): Boolean { // 屏蔽复制、剪切等上下文菜单 return false } override fun isTextSelectable(): Boolean { // 强制返回false,禁止系统识别文本可选中状态 return false } }
在XML中替换为自定义View:
<com.yourpackage.NoSelectEditText android:id="@+id/scentenceEditText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:cursorVisible="true" android:text="EditText" android:textCursorDrawable="@null" android:textSize="24sp" tools:layout_editor_absoluteX="38dp" tools:layout_editor_absoluteY="36dp" />
核心原理
android:longClickable="false"直接屏蔽长按触发选中的路径setTextIsSelectable(false)禁用系统默认的文本选中状态,配合焦点属性确保光标正常显示- 自定义EditText从触摸事件、上下文菜单、选中状态三个维度彻底阻断文本选中逻辑,同时保留输入和光标功能
内容的提问来源于stack exchange,提问作者user26370805
相关产品推荐
相关产品推荐

