1

Je souhaite implémenter un comportement personnalisé sur LinearLayout. Ce est la structure de mon xml:Comportement personnalisé de CoordinatorLayout avec LinearLayout en tant qu'enfant

<android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
<android.support.design.widget.AppBarLayout.../> 
<android.support.v4.widget.DrawerLayout.../> 
<LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:layout_behavior="com.xxx.BottomBarBehavior" 
      android:layout_gravity="bottom|center_horizontal".../> 
</android.support.design.widget.CoordinatorLayout> 

Le LinearLayout est à l'intérieur CoordinatorLayout, en dessous du DrawerLayout. Le LinearLayout ne remonte pas lorsque le snack est affiché. Je ne peux tout simplement pas comprendre. La disposition est telle que DrawerLayout contient un ViewPager et ce viewPager est rempli par un autre xml par un fragment. Et le snackbar est généré par un élément dans le recyclerView de ce fragment.

Voici comment ma classe de comportement BottomBarBehavior personnalisé ressemble à:

public class BottomBarBehavior extends CoordinatorLayout.Behavior<LinearLayout> { 
public BottomBarBehavior(Context context, AttributeSet attrs) {} 

@Override 
public boolean layoutDependsOn(CoordinatorLayout parent, LinearLayout child, View dependency) { 
    return (dependency instanceof Snackbar.SnackbarLayout) || 
      (dependency instanceof DrawerLayout); 
} 

@Override 
public boolean onDependentViewChanged(CoordinatorLayout parent, LinearLayout child, View dependency) { 
    if(dependency instanceof Snackbar.SnackbarLayout) { 
     float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
     child.setTranslationY(translationY); 
    } 
    return true; 
} 

}

+3

Nettoyez et reconstruisez le projet. Votre 'layoutDependsOn' n'a rien à voir avec' ClassCastException'. Vérifiez si cela se produit à nouveau. –

+0

Cela a fonctionné! Mais mon comportement n'est toujours pas suivi par LinearLayout. – Sid

+0

Quelle instance de CoordinatorLayout passez-vous à l'appel make() de votre Snackbar? – colithium

Répondre

0

Je pense que vous manquez juste un super(); dans le constructeur de BottomBarBehavior.

+0

Oui, je l'ai manqué. Mais même après avoir mis super(), il ne fonctionne toujours pas correctement. Le onDependentViewChanged() n'est simplement pas appelé lorsque le snack est créé. – Sid

+0

La seule autre différence entre mon implémentation de travail et la vôtre: Je ne vérifie pas 'DrawerLayout' dans' layoutDependsOn' – eddie

+0

Mais cela ne devrait pas importer du tout. Droite? – Sid