【问题标题】:onClickListener on a LinearLayout线性布局上的 onClickListener
【发布时间】:2021-02-12 19:10:44
【问题描述】:

我想实现的功能有点问题。

我有一个LinearLayout,包含 2 个TextViews。我想在它上面设置一个onClickListener,这样它的行为就像ListView中的一个项目一样。

我已经尝试了一些可能的实现,并使用 LinearLayout 的 xml 属性 android:onClick 使其工作。

由于我希望应用程序对点击 LinearLayout(如在 ListView 中)做出视觉反应,因此我将其放入侦听器回调方法中:

l.setBackgroundColor(android.R.drawable.list_selector_background);

l 是一个LinearLayout 对象,用findViewById() 初始化;

每当我尝试单击布局时,应用程序都没有响应。我尝试用显示的 Toast 消息替换回调方法中的代码,它可以工作,所以我猜问题出在setBackgroundColor。

有人熟悉这个吗?

PS:抱歉,我现在不能发布更多代码,我正在工作。

【问题讨论】:

  • 使用 DDMS 或 adb logcat 检查您的堆栈跟踪以查找异常的来源。如果您无法理解,请编辑此问题并在此处发布。

标签: android


【解决方案1】:

您必须在xml布局文件中设置LinearLayout属性android:clickable="true"或在java活动代码中设置setClickable(true)。

【讨论】:

  • 我认为android:clickable = "true" 是语法。
【解决方案2】:

我注意到,只要 LinearLayout 中的任何子元素具有 android:textIsSelectable="true" 属性,上述所有建议都无济于事。

【讨论】:

    【解决方案3】:

    我发现 setClickable(true) 仍然会导致点击转到线性布局的子级。我发现要让 LinearLayout 捕获触摸而不是它的子元素,我必须重写 dispatchTouchEvent 方法,因此我为此目的创建了 LinearLayout 的子类。不过,这似乎是一个丑陋的解决方案。

    【讨论】:

    【解决方案4】:

    你应该把LinearLayout的focusable设置为true,把所有children view的focusable设置为false,不要使用android:clickable="true",但是你看不到linelayout点击的效果。顺便说一句,最好的方法是实现 onTouchEvent api。

    【讨论】:

      【解决方案5】:

      android:clickable="true" 在一种情况下完美运行。 您必须将子项放入 LilnearLayout 到 android:clickable="false"。

      【讨论】:

        【解决方案6】:

        遇到了同样的问题,我已经尝试了一个小时 SO 中的所有答案,但都没有奏效。

        然后我意识到我只需要将我的 LinearLayout 提升到布局的底部,因为其他视图阻止了它,然后它就可以工作了,没有向布局添加任何特殊属性。

        把它放在这里以防有一天它可能对某人有所帮助。

        【讨论】:

        • 你是怎么把它放到底部的?
        • 底部是什么意思,是z层还是方向?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多