2012-04-16 12 views
12

ImageButtonと同じように動作する線形レイアウトを作成したいと思います。Android:ClickイベントをLinearLayoutチャイルドに伝播してドロアブルを変更する方法

<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(); 
    } 
} 

しかし、それはまだ同じをreamins。助けてくれてどうもありがとう。

答えて

38

は数ヵ月後に同じ問題を抱えた後、あなたのImageViewのとのTextViewで

android:duplicateParentState="true" 

.. then the views get its drawable state (focused, pressed, etc.) from its direct parent rather than from itself.

+0

はい!それでおしまい!ありがとうございました... – Bhiefer

+0

android:duplicateParentState = "true"は私のためには機能しません。 –

+1

私は同じ問題を抱えていますが、クリックが機能してセレクタが動作しません。 –

0

を入れて、私はこの解決策を見つけた:

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... 
} 
2

だけでなく、作るごと子:

android:duplicateParentState="true" 

しかし、また、さらに:

android:clickable="false" 

クリッカブル子ビューが使用されている場合、これは(単に動作していない、または溶液)予期しない動作を防ぐことができます。

SO Source

関連する問題