2017-10-14 4 views
0

J'ai un FrameLayout avec deux imbriqués LinearLayout s. Je veux un onClickListener() pour FrameLayout. Après une recherche j'ai eu une solution clickable="false".Android mise en page cliquez sur l'écouteur ne fonctionne pas

Ceci est mon fichier Mise en page:

<FrameLayout 
    android:id="@+id/flOuter" 
    android:paddingLeft="@dimen/half_margin" 
    android:paddingRight="@dimen/half_margin" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:clickable="false" 
     android:gravity="center" 
     android:id="@+id/flAddIdProof" 
     android:background="@drawable/add_background" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ImageView 
      android:clickable="false" 
      android:id="@+id/ivIcon" 
      android:src="@drawable/ic_add_black_48dp" 
      android:background="@drawable/add_button_border" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     </LinearLayout> 

    <LinearLayout 
     android:clickable="false" 
     android:id="@+id/llLinear" 
     android:alpha="0.5" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:enabled="false" 
      android:clickable="false" 
      android:drawablePadding="@dimen/half_margin" 
      android:drawableLeft="@drawable/ic_devices_black_24dp" 
      android:hint="Identity Proof" 
      android:inputType="none" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <EditText 
      android:enabled="false" 
      android:clickable="false" 
      android:drawableLeft="@drawable/ic_border_color_black_24dp" 
      android:hint="Identity Number" 
      android:drawablePadding="@dimen/half_margin" 
      android:inputType="none" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</FrameLayout> 

Voici mon clic auditeur:

flOuter.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Toast.makeText(DeviceInMeeting.this, "detect", Toast.LENGTH_SHORT).show(); 
    } 
}); 

Je ne sais pas comment déboguer pour les auditeurs onClick, clickable="false" ne fonctionne pas dans mon cas.

+0

dupliquer: https://stackoverflow.com/q/37698640/1531971 – jdv

Répondre

1

Vous utilisez ce module. Essayez d'utiliser:

<FrameLayout 
    android:id="@+id/flOuter" 
    android:paddingLeft="@dimen/half_margin" 
    android:paddingRight="@dimen/half_margin" 
    android:layout_width="match_parent" 
    android:clickable="true" 
    android:layout_height="wrap_content"> 

    // Other layouts there 

</FrameLayout> 
+0

mais je veux une mise en page cliquable, pas linéaire –

+0

Oui. J'ai édité la réponse. vérifiez-le –

+0

ne sais pas pourquoi mais votre solution n'a pas fonctionné pour moi ... –

0

Pour champs que vous ne voulez pas être cliqué sur ajouter clickable=false pour eux. Et pour les champs pour lesquels vous ne voulez pas cliquer, ajoutez clickable=true pour eux. Une chose à retenir ici est que si vos éléments enfants contiennent des éléments cliquables comme des boutons et des edittexts et que vous voulez obtenir un événement click sur la mise en page parente, ajoutez false cliquable à l'enfant et true au parent.

0

Essayez la mise en œuvre dans android:clickable="true" Après l'extrait de code pour FrameLayout

<FrameLayout  
    android:id="@+id/flOuter" 
    android:clickable="true" 
    android:paddingLeft="@dimen/half_margin" 
    android:paddingRight="@dimen/half_margin" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

et en ajoutant android:clickable="false" dans d'autres imbriqué.

<LinearLayout  
    android:id="@+id/flOuter" 
    android:clickable="false" /> 
0

Vous devez définir la place OnTouchListener onClickListener. Dans la méthode onTouch, vous pouvez décider si l'événement tactile est transmis aux enfants (en retournant false) ou consommer un événement.

Sur votre cas, vous devriez faire votre logique et revenir vrai.