90 votes

Désactiver le défilement dans webview?

Jusqu'à maintenant, j'ai été un développeur iPhone uniquement et maintenant, j'ai décidé de donner Android un tourbillon. Quelque chose que je n'ai pas été en mesure de découvrir sur Android est la procédure de programmation pour empêcher le défilement en WebView?

Quelque chose de similaire à l'iphone de prévention de l' onTouchMove événement serait génial!

188voto

peceps Points 7246

Voici mon code pour la désactivation de tous défilement dans webview:

  // disable scroll on touch
  webview.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
      return (event.getAction() == MotionEvent.ACTION_MOVE);
    }
  });

À seulement masquer les barres de défilement, mais pas de désactiver le défilement:

WebView.setVerticalScrollBarEnabled(false);
WebView.setHorizontalScrollBarEnabled(false);

ou vous pouvez essayer d'utiliser une seule colonne mise en page mais cela ne fonctionne qu'avec de simples pages et il désactive le défilement horizontal:

   //Only disabled the horizontal scrolling:
   webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

Vous pouvez également essayer d' envelopper votre webview avec défilement vertical scrollview et désactiver tous défilement sur la webview:

<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"    >
  <WebView
    android:id="@+id/mywebview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="none" />
</ScrollView>

Et ensemble

webview.setScrollContainer(false);

N'oubliez pas d'ajouter la webview.setOnTouchListener(...) le code ci-dessus pour désactiver tous défilement dans la webview. La verticale de la ScrollView pour permettre le défilement de la WebView.

21voto

GDanger Points 96

Faire de l' WebView ignorer MotionEvent.ACTION_MOVE événements est pas la voie à suivre à ce sujet. Que faire si l' WebView doit entendre parler de ces événements?

Au lieu de cela sous-classe WebView et Remplacer overScrollBy.

public class NoScrollWebView extends WebView {
    ...
    @Override
    public boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, 
                                int scrollRangeX, int scrollRangeY, int maxOverScrollX, 
                                int maxOverScrollY, boolean isTouchEvent) {
        return false;
    }
}

Si vous regardez le source pour l' WebView , vous pouvez voir qu' onTouchEvent des appels doDrag qui demande overScrollBy.

20voto

umar Points 881

Je ne sais pas si vous avez encore besoin ou pas, mais voici la solution:

appView = (WebView) findViewById(R.id.appView); 
appView.setVerticalScrollBarEnabled(false);
appView.setHorizontalScrollBarEnabled(false);

15voto

Auri Rahimzadeh Points 558

L'ajout de la marge de détails pour le corps d'empêcher le défilement si votre contenu correctement enveloppements, de la manière suivante:

<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0">

Assez facile, et beaucoup moins de code + bug généraux :)

9voto

user322987 Points 41

Définir un écouteur sur votre webview:

// breakingart.com: This prevents the webview being scrolled
webView.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return(event.getAction() == MotionEvent.ACTION_MOVE));
            }
        });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X