0

J'ai la mise en page par défaut AppBar dans une mise en page de coordinateurComment définir un OnClickListener à CollapsingToolbarLayout Titre

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:expandedTitleMarginStart="@dimen/activity_horizontal_margin" 
     app:expandedTitleMarginEnd="@dimen/activity_horizontal_margin" 
     app:expandedTitleGravity="start|bottom" 
     app:collapsedTitleTextAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" 
     app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#FAFAFA" 
      android:fitsSystemWindows="true" 
      android:orientation="vertical" 
      app:layout_collapseMode="parallax"> 

      <com.petronas.laniakea.view.FixedRatioImageView 
       android:id="@+id/image" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:scaleType="centerCrop" 
       android:src="@drawable/logo_blue" /> 

     </LinearLayout> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.CollapsingToolbarLayout> 
</android.support.design.widget.AppBarLayout> 

Comment puis-je configurer un OnClickListener pour le TextView titre? J'ai pu obtenir le privé Titre Barre d'outils TextView, le rendre public et mis un OnClickListener à ce point de vue:

toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Field titleField = null; 
     try { 
      titleField =Toolbar.class.getDeclaredField("mTitleTextView"); 
      titleField.setAccessible(true); 
      TextView barTitleView = (TextView) titleField.get(toolbar); 
      barTitleView.setOnClickListener(v -> {}); 
     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 

Le code ci-dessus fonctionne bien, mais je ne comprends toujours pas un événement de clic lorsque je clique sur le titre. Des idées? Voici ma hiérarchie de vue tel qu'il apparaît sur Stetho: View Hierarchy

+0

Peut être que vous pouvez vérifier ce https://stackoverflow.com/a/24838396/900128 –

+0

@MuthukrishnanRajendran J'ai essayé cela renvoie déjà null, ne fonctionne pas. – MhdAdeebMasoud

Répondre

0

Vous pouvez essayer en enveloppant le TextView par Toolbar. Ainsi, la structure de votre mise en page soit comme:

<Toolbar ...> 
    <TextView android:id="@+id/toolbarTextId" ..../> 
</Toolbar> 

Maintenant, utilisez OnClickListener tap sur le texte.

yourTextView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // some action 
    } 
}); 
+0

J'ai essayé cela, mais il est affiché comme un TextView fixe sur la barre d'outils (ne montrant pas les animations d'expansion/de réduction avec le CollapsingToolbarLayout). – MhdAdeebMasoud

2

Pour autant que je sache, il n'y a pas moyen de mettre un OnClickListener sur le TextView dans une sorte de ActionBar ou barre d'outils. La façon dont vous utilisez utilise des API de réflexion qui, lorsqu'elles sont intégrées dans une application de version, se bloquent rapidement.

+0

Merci pour le conseil, je ne l'aime pas non plus. C'est pourquoi je cherche une solution. – MhdAdeebMasoud