web-dev-qa-db-fra.com

Comment définir app: layout_scrollFlags for Toolbar par programme

Mon application a un viewpager et 4 onglets, chaque onglet ayant de nombreux fragments. Mais je veux juste que ma barre d’outils défile vers le haut/bas tout en faisant défiler recyclerview dans 2 onglets spécifiques. Mais je ne sais pas comment bloquer le défilement de la barre d’outils pour d’autres onglets. J'ai essayé d'importer la barre d'outils pour chaque fragment mais il semble que je ne peux pas le faire. Quelqu'un a une idée pour résoudre ce problème?

55
Hoang Ha

Il est fortement déconseillé de modifier les indicateurs de défilement en fonction de l'onglet sélectionné. Le fait que la barre d'outils soit automatiquement renvoyée (et le contenu déplacé vers le bas) lors du défilement vers un onglet non recyclable peut être très choquant et ne correspond probablement pas au modèle d'interaction souhaité ( exaspéré si vos deux RecyclerView tabs sont côte à côte).

Toutefois, si vous souhaitez le voir en personne, vous pouvez utiliser setScrollFlags () pour définir les indicateurs de défilement par programme:

Toolbar toolbar = ... // your toolbar within an AppBarLayout
AppBarLayout.LayoutParams params = 
    (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
    | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);

Pour effacer les drapeaux

params.setScrollFlags(0)
113
ianhanniballake
// Show toolbar when we are in maps mode
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
if(isMapIndex) {
    params.setScrollFlags(0);
    appBarLayoutParams.setBehavior(null);
    mAppBarLayout.setLayoutParams(appBarLayoutParams);
} else {
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
    mAppBarLayout.setLayoutParams(appBarLayoutParams);
}
10
Denny Weinberg