加载webview应用程序时在顶部显示进度条

我正试图在应用程序的顶部显示一个进度条,如谷歌浏览器为Android显示在加载网站时加载栏。

当用户点击webview应用程序的任何内部链接时,我想显示此进度条…就像谷歌浏览器显示一样。

这是我尝试过的,这段代码不起作用,app即使不启动也会停止工作。

public class MainActivity extends AppCompatActivity { private WebView mWebView; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setBackgroundDrawable(null); progressBar = (ProgressBar) findViewById(R.id.progressBar); progressBar.setMax(100); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.main_webview); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(0); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); progressBar.setVisibility(View.GONE); progressBar.setProgress(100); if (mWebView.getProgress() == 100) { // show webview mWebView.setVisibility(View.VISIBLE); // hide splash findViewById(R.id.splash_screen).setVisibility(View.GONE); } } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().contains("www.example.com")) { return false; } Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity(intent); return true; } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { view.loadUrl("file:///android_asset/offline.html"); } }); mWebView.loadUrl("http://www.example.com/?m=1"); } } 

主要活动:

       

您创建MyWebChromeClient

 public class MyWebChromeClient extends WebChromeClient { private ProgressListener mListener; public MyWebChromeClient(ProgressListener listener) { mListener = listener; } @Override public void onProgressChanged(WebView view, int newProgress) { mListener.onUpdateProgress(newProgress); super.onProgressChanged(view, newProgress); } public interface ProgressListener { public void onUpdateProgress(int progressValue); } } 

在您的MainActivity中

 public class MainActivity extends AppCompatActivity implements MyWebChromeClient.ProgressListener{ private WebView mWebView; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.webView); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); // add progress bar mProgressBar = (ProgressBar) findViewById(R.id.progressBar); mWebView.setWebChromeClient(new MyWebChromeClient(this)); mWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mProgressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressBar.setVisibility(View.GONE); } }); } @Override public void onUpdateProgress(int progressValue) { mProgressBar.setProgress(progressValue); if (progressValue == 100) { mProgressBar.setVisibility(View.INVISIBLE); } } } 

在activity_main.xml中

     

在drawable中创建bg_progress_bar_webview.xml

            

希望!它可以帮助你