如何在将数据加载到我的网页浏览量时显示进度条? 我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_PROGRESS);
getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
this.setProgressBarVisibility(true);
setContentView(R.layout.layout_article);
WebView webview = (WebView) findViewById(R.id.webView);
final Activity activity = this;
webview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setProgress(progress * 100);
}
});
webView.loadUrl("http://google.com");
}
答案 0 :(得分:5)
在调用loadData()函数之前,只需尝试显示ProgressDialog或将ProgressBar放在布局中。
在 WebViewClient 中,只需解除()progressDialog或使ProgressBar不可见。
例如:
// when finish loading page
public void onPageFinished(WebView view, String url) {
if(mProgress.isShowing()) {
mProgress.dismiss();
}
}
仅供参考,只有在完成Web客户端设置后才能调用loadData()或loadURL()。
答案 1 :(得分:3)
请尝试以下代码,
ProgressDialog progDailog = ProgressDialog.show( context,"Process ", "Loading Data...",true,true);
new Thread ( new Runnable()
{
public void run()
{
// your data loading code goes here
}
}).start();
Handler progressHandler = new Handler()
{
public void handleMessage(Message msg1)
{
progDailog.dismiss();
}
}
答案 2 :(得分:1)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ProgressBar progress = (ProgressBar) findViewById(R.id.progress);
WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
return false;
}
@Override
public void onPageStarted(final WebView view, final String url, final Bitmap favicon) {
progress.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(final WebView view, final String url) {
progress.setVisibility(View.GONE);
super.onPageFinished(view, url);
}
});
webView.loadUrl("http://google.com");
}
}
R.layout.activity_main
:
<?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">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_centerInParent="true"/>
</RelativeLayout>
答案 3 :(得分:0)
首先创建自定义webview类,并在xml上使用它,
<com.app.ui.views.CustomWebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</com.app.ui.views.CustomWebView>
请确保高度不固定,应该为“ wrap_content”
现在制作这样的自定义Webview类,
public class CustomWebView extends WebView {
private ProgressBar progressBar;
private Context context;
private LinearLayout loaderLayout;
public CustomWebView(Context context) {
super(context);
this.context = context;
initProgressBar();
loadUrlWithData();
}
public CustomWebView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initProgressBar();
}
public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
initProgressBar();
}
private void initProgressBar() {
progressBar = new ProgressBar(context);
progressBar.setIndeterminate(false);
}
private void setLoading(boolean isLoading) {
if (isLoading) {
progressBar.setVisibility(View.VISIBLE);
loaderLayout = new LinearLayout(context);
loaderLayout.setGravity(Gravity.CENTER);
loaderLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams parentLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
loaderLayout.setLayoutParams(parentLayoutParams);
LinearLayout.LayoutParams progressBarLayoutParams = new
LinearLayout.LayoutParams(75, 75);
progressBar.setLayoutParams(progressBarLayoutParams);
if (progressBar.getParent() != null) {
((ViewGroup) progressBar.getParent()).removeView(progressBar);
}
loaderLayout.addView(progressBar);
// add this loaderLayout to your parent view in which your webview is added
else {
progressBar.setVisibility(View.GONE);
}
}
private void loadUrlWithData(){
setLoading(true);
//Load your HTML data with url here
}
//When the content will be loaded, the webview will change it's height
@Override
protected void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
if (h > 400) {
setLoading(false);
}
}
}