1

很难给这个问题一个描述性的标题!

我有一个应用小部件,其中有一些可点击的按钮(根据应用小部件的需要使用 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>
4

1 回答 1

1

也许您可以将 FrameLayout放在按钮下方,而不是顶部。这样,如果他们点击了实际的按钮,您的选择器就会被触发,如果他们错过了按钮并且仍然点击 FrameLayout ......好吧,您的选择器不会被触发,但您的 FrameLayout 点击监听器仍然会被调用。

于 2012-10-24T22:05:56.803 回答