LinearLayout onClick有效,但状态不会改变

时间:2015-04-15 06:26:05

标签: android android-layout onclick

布局具有以下结构:

 <LinearLayout
        android:id="@+id/card_pack_clickable_area"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@drawable/card_pack_bg_selector">

            <FrameLayout
                android:id="@+id/card_pack_body_frame_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/bg_card_pack_body">

                <...>

            </FrameLayout>

            <TextView
            android:id="@+id/card_pack_percentage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="@color/bg_card_pack_body"/>

  </LinearLayout>

@drawable/card_pack_bg_selector"的内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_pressed="true">
      <shape>
          <solid android:color="#536dfe" />
      </shape>
  </item>

  <item android:state_focused="true">
      <shape>
          <solid android:color="#536dfe" />
      </shape>
  </item>

  <item android:drawable="@android:color/transparent"/>

</selector>

问题陈述

因此LinearLayout card_pack_clickable_area有两个元素:FrameLayout card_pack_body_frame_layout和TextView card_pack_percentage

我想要实现的是将FrameLayout和TextView作为单个可点击区域,这就是我将它们包装到外部LinearLayout的原因。

在Java代码中,我在此LinearLayout上放了onClickListener。实际上,当我单击FrameLayout或TextView时,我正在获取onClick事件。

问题在于LinearLayout 不会更改其状态,因为它应该按照其背景(@drawable/card_pack_bg_selector")进行更改。

问题

如何将FrameLayout和TextView作为具有单个背景的联合可点击区域,这会改变其按下/未按下的状态?

4 个答案:

答案 0 :(得分:3)

您可以尝试将android:clickable="true"添加到外部线性布局。

如果不起作用,您还可以尝试再次将android:descendantFocusability="beforeDescendants"添加到外部布局中。

祝你好运

答案 1 :(得分:0)

也许,根据this question,你必须让你的LinearLayout可点击吗?在询问之前请记得谷歌; - )

答案 2 :(得分:0)

我应该从内部元素中移除背景属性(android:background="@color/bg_card_pack_body")(在我的例子中是FrameLayout和TextView)。

答案 3 :(得分:-1)

用@ drawable / card_pack_bg_selector中的旧代码替换此代码,并尝试我希望它正在工作....

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="#536dfe" android:state_focused="true" android:state_pressed="true"/>
    <item android:drawable="#536dfe" android:state_focused="false" android:state_pressed="true"/>
    <item android:drawable="#536dfe" android:state_focused="true"/>
    <item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false"/>

</selector>