web-dev-qa-db-fra.com

Comment désactiver l'effet de défilement excessif sur RecyclerView UNIQUEMENT lorsque vous ne pouvez pas faire défiler de toute façon?

Contexte

Parfois, tous les éléments de recyclerView sont déjà visibles pour l'utilisateur.

Dans ce cas, il ne serait pas important pour l'utilisateur de voir l'effet de défilement excessif, car il est impossible de faire défiler et de voir plus d'éléments.

Le problème

Je sais que pour désactiver l'effet de défilement excessif sur RecyclerView, je peux simplement utiliser:

recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);

mais je ne peux pas savoir quand déclencher cela, quand le défilement n'est pas possible de toute façon.

La question

Comment puis-je identifier que tous les éléments sont entièrement visibles et que l'utilisateur ne peut pas vraiment faire défiler?

Si cela aide à supposer quelque chose, j'utilise toujours LinearLayoutManager (vertical et horizontal) pour RecyclerView.

15
android developer

vous pourriez donner OVER_SCROLL_IF_CONTENT_SCROLLS un essai. Conformément à la documentation

Autoriser un utilisateur à faire défiler cette vue uniquement si le contenu est suffisamment volumineux pour faire défiler de manière significative, à condition qu'il s'agisse d'une vue pouvant défiler.

Ou vous pouvez vérifier si vous avez suffisamment d'éléments pour déclencher le défilement et activer/désactiver le mode de défilement, selon celui-ci. Par exemple

boolean notAllVisible = layoutManager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1;
if (notAllVisible) {
   recyclerView.setOverScrollMode(allVisible ? View.OVER_SCROLL_NEVER);
}
11
Blackbelt
<Android.support.v7.widget.RecyclerView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:overScrollMode="never"/>

Ajoutez simplement Android:overScrollMode="never" en XML

8
Ketan Ramani

Vous pouvez essayer quelque chose comme ceci:

totalItemCount = linearLayoutManager.getItemCount();
firstVisibleItem = linearLayoutManager.findFirstCompletelyVisibleItemPosition()
lastVisibleItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();

if(firstVisibleItem == 0 && lastVisibleItem -1 == totalItemCount){
    // trigger the overscroll effect
}

Que vous pourriez ajouter dans la onScrolled() d'un OnScrollListener que vous ajoutez sur votre RecyclerView.

1
megaturbo