3

目標 - webview が web ページを読み込んだら、 scrollTo(0,60) したい。少なくとも、Web ページの読み込みが完了したときに表示されるちらつきを防止したいと考えています。ちらつき - webview が URL (wiki など) をロードすると、ユーザーはそれをスクロールしてテキストを読むことができます。ただし、読み込みが完了すると、webview は自動的に一番上までスクロールします。これは標準ブラウザでは発生しません。API 8 をターゲットにしています (古いですが、人々はまだそのバージョンを使用しています)。

ここにいくつかのコードがあります:

private class WebBrowserWebViewClient extends WebViewClient 
{   
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    {
        Log.d(TAG, "Load URL");
        view.loadUrl(url);                                 
        return true;                
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {
        super.onPageFinished(view, url);

        Log.d(TAG, "Page Finished Loading");

        //Attempt scrollTo here does not work.
        view.scrollTo(0, 60);
    }            
}

画像リスナーも作成しました。

mWebView.setPictureListener(new PictureListener()
{               
        @Override
        public void onNewPicture(WebView view, Picture picture) 
        {
            Log.d(TAG, "On New Picture called....Y is " + view.getScrollY());

                //Does not work because it is called multiple times         
                view.scrollTo(0, 60);
            }       
});

私も進歩し続けます

mWebView.setWebChromeClient(new WebChromeClient()
{
       @Override
       public void onProgressChanged(WebView view, int newProgress) 
       {
            super.onProgressChanged(view, newProgress);

            Log.d(TAG,"On PRogress Changed. New Prgoress = " + newProgress);
       }
});

ログのデバッグで気付いたのは、webview が URL の読み込みを完了する前に onPageFinished() が呼び出されたことです。onNewPicture() は、URL 内の画像の数に応じて複数回呼び出され、onPageFinsiehd() が呼び出された後に呼び出されます。onProgressChanged() newProgress は常に 100 になり、停止します。onProgressChanged() が 100 に達して onNewPicture が起動すると、webview がスクロールして一番上に戻ります。

質問 - WebView がスクロールして一番上に戻らないようにするにはどうすればよいですか?

注 - 同様の問題に関する他の投稿を見たことがありますが、どれも問題を解決していません。

4

0 に答える 0