7

各アイテムに対応するビューが自明ではなく、テキストと複数のボタンで構成されるギャラリー ビューを使用しています。

ギャラリー ビュー (ボタンの 1 つ以外の場所) をクリックしてドラッグすると、ボタンの描画可能な状態が押された状態に変わり、すべてのボタンが現在押されているように見えます。さらに、選択された状態でも同じ動作が発生します (たとえば、子 TextViews のすべてのテキストの色が変わります)。

私はこの動作を防止しようとしており、android:duplicateParentState xml 属性と setDuplicateParentStateEnabled プロパティを見つけました。これは私がやろうとしていることを達成するはずですが、効果がないようです。

何か案は?

4

3 に答える 3

8

少し遅れているかもしれませんが、最近この問題に遭遇したので、修正しました。

実際にオーバーライドする必要があるメソッドは Gallery 内で非公開であるため、dispatchSetSelected と dispatchSetPressed はここではあまり役に立ちません。

解決策は、setPressed(boolean) をオーバーライドして単純に無視する、子ビューの周りに追加のレイアウト (LinearLayout のサブクラスを使用) を追加することです。これにより、ギャラリーが子に押された状態を強制することを防ぎますが、これらの子を直接アクティブ化することを許可し、イベントが上方に伝播するのを止めません。

于 2011-01-27T12:35:25.717 に答える
3

どこでduplicateParentStateプロパティが機能するかはわかりませんが、ソースを突破すると、選択されて押された状態が考慮されないことがわかります。カスタムビュークラスを作成し、dispatchSetSelectedメソッドとdispatchSetPressedメソッドをオーバーライドします。

于 2010-10-04T20:01:48.710 に答える
1

If you happen to extend from Gallery to create your own custom version of it, you can simply do:

  @Override
  public boolean onDown(MotionEvent e) {
    // Ignore onDown events in order to avoid having every child's state set to 'pressed'
    return true;
  }

This will still allow the custom gallery's children to properly receive click events, and swiping / flinging works as intended.

于 2012-03-23T01:33:59.013 に答える