27

ImageButton と同様に動作する線形レイアウトを作成したいと思います。

<LinearLayout
    android:id="@+id/container"
    style="?WidgetHomeIconContainer">            

    <ImageView
        android:id="@+id/icon"
        style="?WidgetHomeIcon" />

    <TextView
        android:id="@+id/title"
        style="?WidgetHomeLabel"             
        android:text="@string/title"
        android:textAppearance="?attr/TextHomeLabel" />
</LinearLayout>

ImageView、TextView、LinearLayout のスタイルでは、すべての状態のセレクターを設定します。

今:

  • ImageViewをクリックすると(ImageButtonでも試しました)、正しく動作し、セレクターxmlに従って画像が変更されます。
  • LinearLayout をクリックすると - 線形レイアウトがクリックされますが、ImageView と TextView は描画可能/外観を変更しません

そこで、次のことをしたいと思います。親 LinearLayout をクリックすると、すべての子を押された状態に変更する必要があります。

クリックを伝播するために、次のコードを LinearLayout onClickListener に追加しようとしました。

@Override
public void onClick(View v)
{
    LinearLayout l = (LinearLayout) v;
    for(int i = 0; i < l.getChildCount(); i++)
    {
        l.getChildAt(i).setClickable(true);
        l.getChildAt(i).performClick();
    }
}

しかし、それはまだ同じままです。助けてくれてありがとう。

4

5 に答える 5

53

置く

android:duplicateParentState="true"

ImageView と TextView..では、ビューはそれ自体からではなく、直接の親から描画可能な状態 (フォーカス、押された状態など) を取得します。

于 2012-04-16T08:59:42.110 に答える
1

数か月後に同じ問題が発生した後、次の解決策を見つけました。

private void setOnClickListeners() {
    super.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            onClick(v);
        }
    });
    for (int index = 0; index < super.getChildCount(); index++) {
        View view = super.getChildAt(index);
        view.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                onClick(v);
            }
        });
    }
}

protected void onClick(View v) {
    // something to do here...
}
于 2012-11-26T07:59:12.323 に答える
0

最初、私の子ビューは親からのクリックを取得できませんでした。調査した後、それを機能させるために私がする必要があるのは次のとおりです。

  1. 子ビューのクリック リスナーを削除する
  2. 親ビューにクリック リスナーを追加する

したがって、すべての子にこれらを追加する必要はありません。

android:duplicateParentState="true"
android:clickable="false"

duplicateParentState子ビューの 1 つだけに追加します。

子ビューが親クリック イベントをリッスンするようになりました。

于 2019-02-21T19:49:53.217 に答える