2012-04-16 11 views
12

को बदलें, मैं एक रैखिक लेआउट बनाना चाहता हूं जो छविबटन के समान व्यवहार करेगा।एंड्रॉइड: लाइनरलायआउट बच्चों को क्लिक ईवेंट का प्रचार कैसे करें और उनके ड्रायबल

<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 के साथ) - यह सही ढंग से कार्य और छवि चयनकर्ता एक्सएमएल अनुसार बदल जाता है।
  • जब मैं LinearLayout पर क्लिक करें - रेखीय लेआउट क्लिक किया जाता है, लेकिन imageView और TextView यह drawable/उपस्थिति

तो मैं निम्नलिखित करना चाहते हैं बदल नहीं है। जब मैं पैरेंट लीनियरआउट पर क्लिक करता हूं, तो मुझे अपने सभी बच्चों को दबाने वाले राज्य में बदलने की ज़रूरत है।

मैं क्लिक प्रचार करने के लिए 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

रखो

android:duplicateParentState="true" 
अपने imageView और TextView में

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

+0

हाँ! बस! धन्यवाद ... – Bhiefer

+0

एंड्रॉइड: डुप्लिकेट पेरेंटस्टेट = "सच" मेरे लिए काम नहीं करता है, कोई विचार क्यों? –

+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