как показать индикатор на веб-просмотре? - PullRequest
34 голосов
/ 11 октября 2010

Я пытаюсь открыть веб-страницу в своем приложении, используя 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());

Ответы [ 5 ]

43 голосов
/ 11 октября 2010

Попробуйте это:

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);
19 голосов
/ 30 января 2014

Вот код, который я использую:

Внутри 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" />

Надеюсь, это поможет ..

11 голосов
/ 11 октября 2010

Вам нужно сделать что-то вроде этого:

@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() дважды.Второй вызов отменяет первый вызов, поэтому вы не получите обработку ошибок.

3 голосов
/ 30 апреля 2013

1. В текущем вызовите AsyncTask .

2. В asynctask вы просто делаете диалоги прогресса и показывает диалоги прогресса.

3. В веб-клиенте вы просто снова показываете диалоговое окно прогресса, нажимаете на любую ссылку веб-сайта, которая открывается в вашем веб-просмотре, и после полной загрузки ссылки мы переопределяем метод onPageFinished и в этом методе мы отклоняем прогресс диалог.

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();

}

AsyncTask

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

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        if (!pd.isShowing()) {
            pd.show();
        }

        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        System.out.println("on finish");
        if (pd.isShowing()) {
            pd.dismiss();
        }

    }
}
0 голосов
/ 04 июля 2017

Вот код, который я использую в 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...