android - 如何在android中打开webview之前显示进度条
问题描述
一旦Activity从intent开始,就需要显示一个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 后,ProgressBar 不会显示空白屏幕,直到 WebView 打开。那么如何解决这个问题。任何人都可以帮助解决这个问题。
解决方案
您的 xml 文件似乎正确,但您的 java 文件包含不必要的代码内容。只是在 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
}
}
推荐阅读
- php - AWS EC2 Wordpress - 未启用 gd 模块
- blockchain - 如何使用 HardHat 调用应付账款 Solidity 函数?
- node.js - 这是分割视频的正确方法吗?
- python - 如果使用 numpy 在 rgb 图像数组中低于某个值,则将值设置为零
- nodatime - 分区日期时间和即时之间的 Noda 时间比较
- php - 数据未通过 PHP 表单保存在数据库中
- html - 使用浮动元素时自动边距
- javascript - ReactNative FlatList 并不总是显示所有项目并且不可滚动。它将行限制为 initialNumToRender,但没有滚动来渲染更多
- c# - 如何使用 Aspose.Word C# 在 MS Word 中插入图标
- ios - iOS capturePhoto() 仅在 iPad 11" 第三代前置摄像头上无法拍摄最高分辨率的照片