活动从意图开始后,需要显示一个ProgressBar。一旦显示WebView,则需要隐藏ProgressBar。但是无法在屏幕上显示ProgressBar。下面是我的xml,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_centerInParent="true"/>
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:visibility="invisible"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" />
</RelativeLayout>
下面是我的活动,
public class WebViewActivity extends Activity {
String TAG= WebViewActivity.class.getSimpleName();
String url=null;
WebView webView;
ProgressBar progressBar=null;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
//getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
setContentView(R.layout.activity_webview);
progressBar=findViewById(R.id.progress_bar);
Intent intent=getIntent();
this.url=intent.getStringExtra("url");
webView =(WebView)findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
webView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.INVISIBLE);
AndroidLogger.log(5,TAG," error response"+error);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
AndroidLogger.log(5,TAG,"started"+url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.INVISIBLE);
}
});
}
}
在为WebViewActivity启动Intent之后,直到显示WebBar为止,没有显示ProgressBar出现空白屏幕。那么如何解决这个问题。任何人对此都有帮助。
您的xml文件似乎是正确的,但是您的java文件中包含不必要的代码内容。逐步纠正它,然后执行此操作。
public class WebViewActivity extends Activity implements Listener {
String TAG= PaymentGatewayActivity.class.getSimpleName();
String url=null;
String deviceType="ANDROID", name, password, code, pId=null;
String cur=null;
WebView webView;
ProgressBar progressBar=null;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_webview);
progressBar=(ProgressBar) findViewById(R.id.payment_progress_bar);
progressBar.setVisibility(View.VISIBLE);
AndroidLogger.log(5,TAG,"progress bar made visible");
Intent intent=getIntent();
this.pId=intent.getStringExtra("pId");
// HERE CALLING RETROFIT
CommunicationManager communicationManager = new CommunicationManager(WebViewActivity.this, this,pId );
communicationManager.getLink("get url");
}
//THIS METHOD WILL INVOKED WHEN GETTING SUCCESS RESPONSE
@Override
public void getUrlSuccessResponse(String url, String pId, String cur) {
this.url = url;
this.pId = pId;
this.cur = cur;
SharedPreferences sharedpreferences = this.getSharedPreferences(this.getResources().getString(R.string.app_preferences), Context.MODE_PRIVATE);
this.name = sharedpreferences.getString(this.getResources().getString(R.string.name), "");
this.password = sharedpreferences.getString(this.getResources().getString(R.string.password), "");
this.code = sharedpreferences.getString(this.getResources().getString(R.string.code), "");
webView = (WebView) findViewById(R.id.webView);
webView.setVisibility(View.VISIBLE);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webView.setBackgroundColor(Color.TRANSPARENT) //set this one to remove unnecessary background
//setup custom webview client here
webView.setWebViewClient(new PayWeb());
//load url inside webview
try {
String postData = "type=" + URLEncoder.encode("ANDROID", "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8") + "&code=" + URLEncoder.encode(code, "UTF-8") + "&cur=" + URLEncoder.encode(cur, "UTF-8") + "&name=" + URLEncoder.encode(subscriberId, "UTF-8") + "&pId=" + URLEncoder.encode(pId, "UTF-8");
webView.postUrl(url, postData.getBytes());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public class PayWeb extends WebViewClient{
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progressBar.setVisibility(View.VISIBLE);
return false; // then it is not handled by default action
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//show progressbar
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//hide progressbar
progressBar.setVisibility(View.INVISIBLE);
}
}
@Override
public void getUrlFailureResponse(int statusCode, String status) {
//manage webpage faliour case
}
@Override
public void getUrlNetworkFailureException(int statusCode, String status) {
//manage network faliour case
}
}