1

この質問にわかりやすいタイトルを付けるのは難しかったです!

現在のサイズではタップするのが難しいいくつかのクリック可能なボタン (アプリ ウィジェットの必要に応じて RemoteViews と PendingIntents を使用) があるアプリ ウィジェットがあります。実際のボタンのサイズを変更せずにこれを回避するために、これらのボタンの上に大きな非表示のクリック可能な FrameLayouts を配置して、クリック可能な領域を増やしました。これはうまく機能しますが、ボタンにはセレクターも接続されているため、タップすると画像の背景色が変わります。FrameLayout がボタンを覆っている場合、このセレクターは機能しなくなりました。実際にタップされるのはボタンではなく FrameLayout であるためです。

私の質問は、フレームレイアウトを「クリックスルー」してボタンのセレクターがまだトリガーされるようにする方法があるかどうか、または同じ効果を達成する他の巧妙な回避策があるかどうかです。FrameLayout 自体にセレクターを適用すると、背景の変更が大きくなりすぎます。

以下は、私がやっていることの簡単な例です。私が使用している実際のレイアウトはより複雑であるため、レイアウトの変更が必要なソリューションは、ここに表示されているよりも実行が難しい場合があります。また、FrameLayout を RelativeLayout に配置する理由は、配置の自由度を高めるためです。

編集

FrameLayout は他の 2 つのレイアウトの上に配置されるため、単純にボタンの下に配置することはできません。より広い領域をカバーする必要があります。この問題を解決するためにレイアウト全体をやり直す必要がないことを願っています。

レイアウト

<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 に答える