Android 如何在webview上显示进度条?

Android 如何在webview上显示进度条?,android,Android,我正在尝试使用WebView在我的应用程序中打开一个网页。当我打开网页时,它会显示我一段时间的空白屏幕,然后在我的应用程序内的浏览器中打开该页面 有人建议我如何显示进度或摆脱加载webview时出现的空白屏幕吗 我正在使用以下代码: WebView mWebView = (WebView) findViewById(R.id.mywebview); mWebView.getSettings().setJavaScriptEnabled(true); // error handling fina

我正在尝试使用
WebView
在我的应用程序中打开一个网页。当我打开网页时,它会显示我一段时间的空白屏幕,然后在我的应用程序内的浏览器中打开该页面

有人建议我如何显示进度或摆脱加载webview时出现的空白屏幕吗

我正在使用以下代码:

WebView mWebView = (WebView) findViewById(R.id.mywebview);
mWebView.getSettings().setJavaScriptEnabled(true);

// error handling
final Activity activity = this;

mWebView.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
    }
});

// error  handling

mWebView.loadUrl(URL);
mWebView.setWebViewClient(new HelloWebViewClient());

您需要这样做:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_PROGRESS);
    this.setProgressBarVisibility(true);
}
然后

final Activity activity = this;
mWebView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
        activity.setProgress(progress * 100);
    }
});
更新
我知道这有点太晚了,但我有一点需要注意:您不应该使用
setWebViewClient()
两次。第二次呼叫取消第一次呼叫,这样您就不会得到错误处理。

尝试以下方法:

getWindow().requestFeature(Window.FEATURE_PROGRESS);

WebView mWebView = (WebView) findViewById(R.id.mywebview);

mWebView.getSettings().setJavaScriptEnabled(true);

final Activity activity = this;

mWebView.setWebChromeClient(new WebChromeClient(){

         public void onProgressChanged(WebView view, int progress) {
                 activity.setTitle("Loading...");
                 activity.setProgress(progress * 100);
                    if(progress == 100)
                       activity.setTitle("My title");
                 }
});

mWebView.loadUrl(URL);
一,。在oncreate ur中调用AsyncTask

二,。在asynctask中,您只需创建进度对话框和显示进度对话框

三,。在webview客户端中,您只需再次显示进度对话框,单击在您的webview中打开的网站的任何链接,完成加载链接后,我们将覆盖方法,在页面完成后,我们将关闭进度对话框

oncreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.web_view);

    web_view = (WebView) findViewById(R.id.web_view);

    OpenWebSiteInWebView opensite = new OpenWebSiteInWebView();
    opensite.execute();

}
异步任务

private class OpenWebSiteInWebView extends AsyncTask<String, Void, String> {

    @SuppressWarnings("deprecation")
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected String doInBackground(String... params) {
        web_view.setWebViewClient(new MyWebViewClient());
        web_view.loadUrl("ur site name");
        return null;
    }

    @Override
    protected void onPostExecute(String result) {

    }

    @Override
    protected void onPreExecute() {

        pd = new ProgressDialog(SiteOpenInWebView.this);
        pd.setMessage("Please wait Loading...");
        pd.show();

    }

}

以下是我正在使用的代码:

WebViewClient内部:

webView.setWebViewClient(new WebViewClient() {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        findViewById(R.id.progress1).setVisibility(View.VISIBLE);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        findViewById(R.id.progress1).setVisibility(View.GONE);
    }

});
以下是XML:

<ProgressBar
    android:id="@+id/progress1"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />


希望这有帮助。

以下是我在KOTLIN中使用的代码:

private fun setupWebView() {

    val webViewClient: WebViewClient = object: WebViewClient() {

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            view?.loadUrl(request?.url.toString())
            return super.shouldOverrideUrlLoading(view, request)
        }

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            showProgressDialog()
            super.onPageStarted(view, url, favicon)
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            hideProgressDialog()
            super.onPageFinished(view, url)
        }
    }
    webView.webViewClient = webViewClient

    webView.settings.javaScriptEnabled = true
    webView.settings.defaultTextEncodingName = "utf-8"
}

当我通过chrome应用程序单击url打开时,可能存在重复。但是我想在我的web视图上用progressbar.Window.FEATURE\u PROGRESS不推荐使用活动的setProgress()也不推荐使用。activity.setProgress(PROGRESS ONLY.NOT*100);
private fun setupWebView() {

    val webViewClient: WebViewClient = object: WebViewClient() {

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            view?.loadUrl(request?.url.toString())
            return super.shouldOverrideUrlLoading(view, request)
        }

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            showProgressDialog()
            super.onPageStarted(view, url, favicon)
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            hideProgressDialog()
            super.onPageFinished(view, url)
        }
    }
    webView.webViewClient = webViewClient

    webView.settings.javaScriptEnabled = true
    webView.settings.defaultTextEncodingName = "utf-8"
}