很难给这个问题一个描述性的标题!
我有一个应用小部件,其中有一些可点击的按钮(根据应用小部件的需要使用 RemoteViews 和 PendingIntents),这些按钮在当前大小下难以点击。为了在不调整实际按钮大小的情况下解决这个问题,我在这些按钮上放置了更大的、不可见的、可点击的 FrameLayouts 以增加可点击区域。这很好用,除了按钮也有连接到它们的选择器,以便在点击时图像的背景颜色会发生变化。当 FrameLayout 覆盖按钮时,此选择器不再起作用,因为它现在实际上是被点击的 FrameLayout,而不是按钮。
我的问题是,是否有办法让它“点击”FrameLayout,以便仍然触发按钮的选择器,或者任何其他能达到相同效果的巧妙解决方法?在 FrameLayout 本身上应用选择器会使背景变化太大。
下面是我正在做的一个简化示例。我使用的实际布局更复杂,因此任何需要更改布局的解决方案都可能比这里看起来更难做。此外,将 FrameLayout 放置在 RelativeLayout 中的原因是我可以更自由地放置。
编辑
FrameLayout 放置在其他两个布局之上,这就是为什么我不能简单地将它放在按钮下方的原因。它需要覆盖更大的区域。我希望我不必重做整个布局来解决这个问题。
布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageButton
android:layout_width="@dimen/size_myButton_w"
android:layout_height="@dimen/size_myButton_h"
android:layout_alignParentRight="true"
android:background="@drawable/selector" //NOT TRIGGERED! Covered by FrameLayout below.
android:src="@drawable/myButton" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
<!-- More stuff here! -->
</RelativeLayout>
<!-- Even more stuff here! -->
</LinearLayout>
<FrameLayout
android:layout_width="120dp"
android:layout_height="35dp"
android:layout_alignParentRight="true">
</FrameLayout>
</RelativeLayout>
选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/navy" />
<item android:state_focused="true" android:drawable="@color/white" />
<item android:drawable="@color/white" />
</selector>