4

API レベル 9 以降では、 にandroid:filterTouchesWhenObscured属性と対応するsetFilterTouchesWhenObscuredメソッドがありViewGroupます。たとえば、ビューがonClickListener設定されていて、別のビューがそのビューを覆い隠している場合 (オーバーレイ パネル、トーストなど)、覆い隠されたビューにタッチは渡されません。私の例では、発生onClickしません。

ただし、これは API レベル 7 では利用できません。また、私のプロジェクトの要件は Android 2.1 以降であるため、レベル 7 で作業する必要があります。

それを回避する簡単な方法はありますか?レベル 7 では、このプロパティは基本的に FALSE にハードコードされています。その結果、この奇妙な動作が発生します。ビューにボタンがあります。押すと、別のビューが所定の位置にスライドし、ビューがボタンで覆われます。このビューには独自のボタンがありますが、下のボタンの位置と一致しません。したがって、ユーザーが下のボタンがある場所でオーバーレイ パネルに触れると、onClickそのボタンの が再度起動されます。

onClickこの場合、発砲を防ぐにはどうすればよいですか? ありがとう。

4

1 に答える 1

7

結局のところ、それを行う方法はありません。API レベル 9 より前の Android では、この問題を回避する方法が 2 つあります。

  1. 基礎となるビューからリスナーを削除します (私の場合、約 12 個のリスナーがあり、オーバーレイが再び非表示になった後に削除してから再設定する必要があります)。また

  2. オーバーレイ全体に空の onClickListener を追加します (つまり、clickイベントをインターセプトして何もしません)。これが私の場合の処理​​方法です。

興味深いことに、イベントを受け取る不明瞭なビューの動作は、clickAndroid の以前のバージョンではバグとして報告されていましたが、そのバグはクローズされ、これはバグではなく意図された機能であることが示されました (なぜその機能が必要なのかわかりません)。けれど)。このandroid:filterTouchesWhenObscured属性はレベル 9 で追加され、不幸な開発者をなだめるために追加されたと思います :)

于 2012-06-18T10:36:57.427 に答える