You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android开发:让EditText不可点击但可通过CardView触发获焦点

哈哈,这个需求我之前做项目的时候刚好碰到过!给你两个比隐藏EditText优雅得多的解决方案,完美适配你的要求:

方案一:利用布局属性直接控制(推荐)

你需要的其实是让EditText只有通过代码触发才能获取焦点,而不是触摸它的时候自动获取。这时候可以用focusableInTouchMode这个属性——它和focusable是相互独立的:

在你的EditText布局里加上这一行:

android:focusableInTouchMode="false"

设置之后,点击EditText本身不会触发焦点,但它的focusable依然是true,所以你原来在CardView点击事件里的requestFocus()和唤起软键盘的代码完全可以正常工作。这个方案零Java代码,纯布局配置就能搞定,最省心!

方案二:拦截EditText的触摸事件

如果因为某些原因不能修改布局属性(比如用了封装好的自定义EditText),可以通过代码拦截EditText的触摸事件,让它不响应点击:

etProblem.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // 把触摸事件消费掉,不让EditText触发默认的焦点逻辑
        return true;
    }
});

这样点击EditText的时候,事件会被这个监听器吃掉,不会触发焦点,但你通过CardView调用etProblem.requestFocus()依然有效,软键盘也能正常唤起。

你之前用的隐藏EditText的方法虽然能凑合用,但容易出现布局闪烁的问题,体验不够流畅,上面这两个方案就没有这个问题啦~

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

火山引擎 最新活动