如何让禁用的TextInputEditText响应ListView的onItemClickListener
解决方法
要让TextInputEditText完全不可编辑、保留浮动提示和字数统计功能,同时恢复ListView条目的点击响应,需从条目根布局、TextInputLayout、TextInputEditText三个层面补充设置:
1. 强化条目根布局的焦点拦截
确保ListView条目根布局(如LinearLayout/RelativeLayout)设置以下属性,强制将点击事件传递给条目本身,避免子控件拦截:
android:descendantFocusability="blocksDescendants"
2. 禁用TextInputLayout的焦点与点击
TextInputLayout本身会抢占焦点,需给它添加以下属性:
android:focusable="false" android:focusableInTouchMode="false" android:clickable="false"
3. 彻底禁用TextInputEditText的编辑功能
在现有属性基础上,补充以下属性,确保完全无法编辑:
android:editable="false" android:inputType="none"
4. 启用字数统计(按需添加)
通过TextInputLayout自带属性开启字数统计,无需额外逻辑:
android:counterEnabled="true" android:counterMaxLength="50" <!-- 替换为你的最大字数限制 -->
完整布局示例
<!-- ListView条目根布局 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:orientation="vertical" android:padding="8dp"> <com.google.android.material.textfield.TextInputLayout style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/name" android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" android:counterEnabled="true" android:counterMaxLength="50"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" android:cursorVisible="false" android:focusable="false" android:focusableInTouchMode="false" android:gravity="top|start" android:editable="false" android:inputType="none" android:text="TestName 1"/> </com.google.android.material.textfield.TextInputLayout> <!-- 第二个文本控件和切换按钮 --> </LinearLayout>
关键说明
blocksDescendants是核心,确保ListView条目能接收到点击事件;- 同时禁用TextInputLayout和EditText的焦点、点击、编辑属性,彻底避免事件拦截;
- 浮动提示由TextInputLayout的
hint属性原生支持,无需额外配置。
内容的提问来源于stack exchange,提问作者BlowMyMind
相关产品推荐
相关产品推荐

