LinearLayout onClick 有效,但状态没有改变
LinearLayout onClick works, but the state does not change
布局具有以下结构:
<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 代码中,我将 onClickListener 放在这个 LinearLayout 上。实际上,当我单击 FrameLayout 或 TextView 时,我正在获取 onClick 事件。
问题是 LinearLayout 没有 改变它的状态,因为它应该跟随它的背景 (@drawable/card_pack_bg_selector"
)。
问题
如何将 FrameLayout 和 TextView 作为具有单一背景的联合可点击区域,从而改变其状态 pressed/unpressed?
也许,基于this question,您必须让您的 LinearLayout 可点击?记得在提问前先 google ;-)
用您在@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>
能否请您尝试将 android:clickable="true"
添加到您的外部线性布局中。
如果不起作用,您也可以尝试再次将 android:descendantFocusability="beforeDescendants"
添加到您的外部布局中..
祝你好运
我应该从内部元素(在我的例子中是 FrameLayout 和 TextView)中删除背景属性 (android:background="@color/bg_card_pack_body"
)。
布局具有以下结构:
<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 代码中,我将 onClickListener 放在这个 LinearLayout 上。实际上,当我单击 FrameLayout 或 TextView 时,我正在获取 onClick 事件。
问题是 LinearLayout 没有 改变它的状态,因为它应该跟随它的背景 (@drawable/card_pack_bg_selector"
)。
问题
如何将 FrameLayout 和 TextView 作为具有单一背景的联合可点击区域,从而改变其状态 pressed/unpressed?
也许,基于this question,您必须让您的 LinearLayout 可点击?记得在提问前先 google ;-)
用您在@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>
能否请您尝试将 android:clickable="true"
添加到您的外部线性布局中。
如果不起作用,您也可以尝试再次将 android:descendantFocusability="beforeDescendants"
添加到您的外部布局中..
祝你好运
我应该从内部元素(在我的例子中是 FrameLayout 和 TextView)中删除背景属性 (android:background="@color/bg_card_pack_body"
)。