6
votes

Android: Obtenez la position de défilement d'une vision webview

Je suis nouveau à Android.

Je voudrais simplement savoir où sur une page, l'utilisateur a défilé. Lorsqu'un certain point sur la page Web apparaît en bas de l'écran, je souhaite déclencher un événement. Mais ce code provoque une exception. Je sais que webview hériter getscrolly () à partir de la vue. Est-ce que je ne le mettez pas correctement?

Merci d'avance. xxx


0 commentaires

5 Réponses :


2
votes

et l'exception est?
Voici une note sur les hauteurs d'écran WebView de l'une de mes applications:

// current position (top) = getScrollY();  
// max position = getContentHeight();  
// screen height = getHeight();


3 commentaires

Merci de répondre! C'est une nullpointerexception. Le débogueur s'arrête à la ligne "YPOS = webview.getscrolly ()" mais je ne peux pas comprendre où vient le pointeur NULL. Quant à votre note, j'utilise Getscrolly () Vous avez donc confirmé que c'est la bonne méthode, mais la façon dont j'utilise, c'est apparemment tort.


En fait, j'ai trouvé que dans la ligne "YPOS = webview.getscrolly ()", la variable "webview" est NULL, même si dans la méthode Oncreate ", webview webview = nouvelle webview (this);" travaille. La variable "webview" n'a-t-elle pas une portée qui s'étend de la méthode OnCreate? Et sinon, comment puis-je obtenir une poignée dessus?


@Dave il devrait être webview = nouvelle webview (this); Au lieu de webview webview = New Webview (this); dans oncreate (..).



1
votes

Vous écrivez webview webview; à deux endroits à l'intérieur de la méthode Oncreate ().

simple écrire webview = nouvelleview webview (this); au lieu de webview webview = nouvelle webview (this);

De cette façon, vous pouvez résoudre le problème du pointeur NULL.


0 commentaires

2
votes

LaView a une méthode pour obtenir sa hauteur de contenu, que j'ai utilisée dans ma solution: xxx

cherche:

  • Balance WebView doit être prise en compte pour obtenir la hauteur totale de défilement
  • La densité d'affichage doit être multipliée en hauteur de contenu pour le comparer avec Scrolly
  • sur mon Nexus 5x sur Android 8, Scrolly n'a jamais atteint la hauteur, mais arrêté 1 dP avant la fin (la solution de contournement est incluse dans le code)

1 commentaires

Nécessite le niveau d'API 23.



-1
votes

pour ceux qui utilisent un cadre ionique.

Obtenir le ScrollTop à partir de la webview ne fonctionne pas, car ion_content enveloppe son propre défileur. P>

Pour obtenir The Scrolltop of the webview Utilisation: P>

JavaScript -> P>

 var scroller = $('#_ionic_content')[0].firstChild.offsetParent;
 var  scrollTop_pos = scroller.scrollTop;


0 commentaires

0
votes

Cela a fonctionné pour moi, je calcule la position de défilement de base.

mainWebView.setOnScrollChangeListener { view, scrollX, scrollY, oldScrollX, oldScrollY ->

        if (scrollY > 800) {
            supportActionBar!!.setDisplayHomeAsUpEnabled(true)
            toolbar.logo = resources.getDrawable(R.mipmap.ic_launcher)
        } else {
            supportActionBar!!.setDisplayHomeAsUpEnabled(false)
            toolbar.logo = null
        }
        Log.e(TAG, "initializeWeb: $scrollY")
    }


0 commentaires