我是android应用程序开发和学习的新手。
我已经开发了一个使用加载网站链接的应用程序WebView。而且工作正常。
WebView
但是我在WebView加载页面时显示和隐藏进度条时遇到了问题。
当WebView加载网站的主链接和内部链接时,我想显示一个进度条(仅在中心旋转),而在页面完全加载时,我要隐藏进度条。
我的Java代码:
package in.matebook.myapplication; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView myWebView = (WebView) findViewById(R.id.webView); myWebView.setWebViewClient(new MyWebViewClient()); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.loadUrl("http://www.labnol.org"); } private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.labnol.org")) { // This is my web site, so do not override; let my WebView load the page //or we can add more allowed host in if condition return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return false; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
还有我的布局XML代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout>
现在,将显示进度条,但不会隐藏。
当我创建 进度条 对象并在Java代码中添加以下行时,则不会显示进度条。
progressbar.setVisibility(View.GONE);
我也尝试了其他答案,但是单击内部链接时进度栏不起作用。
我想在加载主页时显示进度栏,并在完全加载主页时隐藏进度栏。
我想在用户单击网站的内部链接时再次显示进度条,并且与上面相同,在页面完全加载时隐藏进度条。
请帮助,我是Android应用程序开发的初学者。
尝试此代码…您需要webChoromeClient来跟踪webview加载进度…
webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { progressBar.setProgress(progress); if (progress == 100) { progressBar.setVisibility(View.GONE); } else { progressBar.setVisibility(View.VISIBLE); } } });
用此代码替换您的webview客户端。
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }