问题
How to call visibility when the page stops loading? I want to make the progressbar invisible, but the code I am using is not letting me override it:
public void onPageFinished(WebView view, String url) {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
}
Activity:
public class Browser extends Activity {
private WebView webView;
private EditText urlEditText;
private ProgressBar progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browser);
webView = (WebView) findViewById(R.id.webView1);
webView.setWebChromeClient(new MyWebViewClient());
CookieManager.getInstance().setAcceptCookie(true);//Enable Cookies
webView.getSettings().setJavaScriptEnabled(true);//Enable Java Script
webView.setWebViewClient(new HelloWebViewClient());
webView.loadUrl("https://www.facebook.com/"); //Set Home page
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//Remove ScrollBars
webView.getSettings().setDefaultFontSize(12);//Set Font Size
webView.getSettings().setLoadsImagesAutomatically(true);//Enable Image Loading
webView.getSettings().setPluginState(PluginState.ON);//Enable Flash
webView.setBackgroundColor(0x00000000);//Transparent Screen When Loading
// webView.getSettings().setBuiltInZoomControls(true);//Set Zoom Controls
webView.getSettings().setAppCacheMaxSize(1024*1024*8);//Set Cache (8mb)
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();//Set Cache (8mb)
webView.getSettings().setAppCachePath(appCachePath);//Set Cache (8mb)
webView.getSettings().setAllowFileAccess(true);//Set Cache (8mb)
webView.getSettings().setAppCacheEnabled(true);//Set Cache (8mb)
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//Set Cache (8mb)
progress = (ProgressBar) findViewById(R.id.progressBar1);
progress.setMax(100);
Button openUrl = (Button) findViewById(R.id.goButton);
openUrl.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String url = urlEditText.getText().toString();
if (validateUrl(url)) {
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
Browser.this.progress.setProgress(10);
}
}
private boolean validateUrl(String url) {
return true;
}
});
}
private class MyWebViewClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
Browser.this.setValue(newProgress);
super.onProgressChanged(view, newProgress);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void setValue(int progress) {
this.progress.setProgress(progress);
}
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
webview.loadUrl(url);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
回答1:
You can set Invisible at on progressChanged method, when newProgress equals 100.
回答2:
You should be able to just toss it right in there.
private class HelloWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, final String url) {
progress.setVisibility(View.GONE); // or View.INVISIBLE, whatever suits your needs
// Or this for more clarity: Browser.this.progress.setVisibility(View.GONE);
}
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
webview.loadUrl(url);
return true;
}
}
来源:https://stackoverflow.com/questions/22844438/call-visibility-onpagefinished-android