在WebView中显示ProgressDialog

问题描述 投票:0回答:2

我已经搜索但我无法找到一个案例来实现我的webview,我的webview dosnt打开一个网页,它只是加载我有的html,所以我需要一个进度条,在数据出现之前,我已经在我的布局中声明了progressBar是我必须在webview中显示html的代码

mProgressBar = (ProgressBar) findViewById(R.id.pBar);

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadDataWithBaseURL("", indicadores.toString(), "text/html", "UTF-8", "");

XML

<WebView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/webview"/>
            <ProgressBar
                android:layout_width="300dp"
                android:layout_height="300dp"
                android:id="@+id/pBar"
                android:layout_gravity="center"/>

在显示结果之前显示progressBar的最佳方法是什么。

谢谢

android webview
2个回答
0
投票

在具有进度条的浏览器中,随着组件通过网络加载,进度会递增。

如果您在本地拥有所有webview数据,则无法报告进度。没有任何地方可以增加进度。您需要webview能够报告它的渲染进度,而这不存在。


0
投票

您有自己的html文件,只需要使用Web视图显示它,此页面不需要花费太多时间进行渲染。所以,如果你想放进度条效果比你可以使用runnable。

public class WebViewActivity extends AppCompatActivity {

private WebView webView;
private ProgressBar progressBar;
private int waitingTime = 2000; // mSec.
private Handler winHandler = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);
    webView = (WebView) findViewById(R.id.webView);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.setVisibility(View.GONE);
    webView.getSettings().setJavaScriptEnabled(true);
    initWebView();
}

private void initWebView() {
    webView.setWebViewClient(new WebViewClient() {

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

        }

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

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
            progressBar.setVisibility(View.GONE);
        }
    });
}

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        webView.loadDataWithBaseURL("", indicadores.toString(), "text/html", "UTF-8", "");
    }
};



@Override
protected void onResume() {
    super.onResume();
    winHandler = new Handler();
    winHandler.postDelayed(runnable, waitingTime);
}

@Override
protected void onDestroy() {
    super.onDestroy();

    if (winHandler != null) {
        winHandler.removeCallbacks(runnable);
    }
}

}

在这里,等待时间是2秒,你可以根据需要改变它。

© www.soinside.com 2019 - 2024. All rights reserved.