我有一个弹出对话框,我在其中加载webview。我想在webview加载到弹出窗口的顶部时显示progressBar。 我已经找到了一种在网页加载时显示加载进度条的方法,但如果在弹出的对话框中加载了这个webview,则不会在其上显示progressBar。 有人可以解释为什么会发生这种情况。
这是代码
[代码]
@SuppressWarnings("static-access")
public void showPopUp(String url){
try{
Dialog dialog = new Dialog(Links.this);
LayoutInflater inflater = (LayoutInflater)getSystemService(Links.this.LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.link_popup, null);
dialog.setContentView(vi);
dialog.setTitle("Title here");
dialog.setCancelable(true);
WebView wb = (WebView) vi.findViewById(R.id.WebView01);
wb.setWebViewClient(new MyWebViewClient());
wb.getSettings().setJavaScriptEnabled(true);
wb.getSettings().setSupportZoom(true);
wb.loadUrl(url);
// final Activity MyActivity = this;
//
// progressDialog = ProgressDialog.show(dialog.getOwnerActivity(), "", "Loading....", true);
//
// wb.setWebChromeClient(new WebChromeClient() {
// public void onProgressChanged(WebView view, int progress)
// {
// MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
// if(progress == 100){
// if(progressDialog.isShowing())
// progressDialog.dismiss();
// }
// }
// });
System.out.println("..loading url..");
dialog.show();
}catch(Exception e){
System.out.println("Exception while showing Agreement : " + e.getMessage());
}
}
[/代码]
它没有用,所以我评论了它。
link_popup.xml
[代码]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="fill"
android:id="@+id/layout_root"
android:background="#000000"
>
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="5dip"
android:layout_alignParentTop="true"
style="?android:attr/progressBarStyleHorizontal"
android:id="@+id/progressbar_Horizontal"
android:max="100"
android:background="#228b22"
/>
<WebView
android:id="@+id/WebView01"
android:layout_below="@id/progressbar_Horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_centerInParent="true"
android:scrollbars="@null"
/>
</RelativeLayout>
[/代码]
答案 0 :(得分:2)
我没有看过你的代码,但如果你看一下xml,你就有了一个RelativeLayout,一个ProgessBar和一个WebView。
当它被夸大时,它将首先绘制RelativeLayout,而不是Progessbar,最后是WebView。由于您的webview在宽度和高度上都有fill_parent,因此ProgressBar将保留在WebView之后......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="fill"
android:id="@+id/layout_root"
android:background="#000000">
<!-- First the WebView -->
<WebView
android:id="@+id/WebView01"
android:layout_below="@id/progressbar_Horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_centerInParent="true"
android:scrollbars="@null"
/>
<!-- Than the Progessbar on top of it -->
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="5dip"
android:layout_alignParentTop="true"
style="?android:attr/progressBarStyleHorizontal"
android:id="@+id/progressbar_Horizontal"
android:max="100"
android:background="#228b22"
/>
</RelativeLayout>
答案 1 :(得分:0)
或者,你可以使你的活动看起来像清单文件中使用它的对话框: 在活动标签
中 android:theme="@android:style/Theme.Dialog"
然后你可以在页面加载
时在你的活动中使用async task
显示进度条
希望这会有所帮助
答案 2 :(得分:0)
此课程将显示一个对话框,其中包含每次加载网页/网站时都会显示微调/进度的网页视图。
/**
* @author Sherif
*
* Copyright 2011
*
* Dialog that will enable web browsing with a progress dialog.
*
*/
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Display;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
public class MyLovelyDialog extends Dialog {
static final float[] DLANDSCAPE = {20, 60};
static final float[] DPORTRAIt = {40, 60};
static final FrameLayout.LayoutParams mFrameLayoutParams =
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
private String mUrl;
private ProgressDialog mProgressDialog;
private WebView mWebView;
private LinearLayout mLinearLayout;
public MyLovelyDialog(Context context, String url) {
super(context);
mUrl = url;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpProgressDialog();
setUpContent();
setUpWebView();
setUpDisplay();
}
private void setUpProgressDialog() {
mProgressDialog = new ProgressDialog(getContext());
mProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mProgressDialog.setMessage("Loading...");
}
private void setUpContent() {
mLinearLayout = new LinearLayout(getContext());
mLinearLayout.setOrientation(LinearLayout.VERTICAL);
}
private void setUpDisplay() {
Display display = getWindow().getWindowManager().getDefaultDisplay();
final float scale =
getContext().getResources().getDisplayMetrics().density;
int orientation =
getContext().getResources().getConfiguration().orientation;
float[] dimensions =
(orientation == Configuration.ORIENTATION_LANDSCAPE)
? DLANDSCAPE : DPORTRAIt;
addContentView(mLinearLayout, new LinearLayout.LayoutParams(
display.getWidth() - ((int) (dimensions[0] * scale + 0.5f)),
display.getHeight() - ((int) (dimensions[1] * scale + 0.5f))));
}
private void setUpWebView() {
mWebView = new WebView(getContext());
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new MyLovelyDialog.MyLovelyWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(mUrl);
mWebView.setLayoutParams(mFrameLayoutParams);
mLinearLayout.addView(mWebView);
}
private class MyLovelyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
mProgressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mProgressDialog.dismiss();
}
}
}
答案 3 :(得分:0)
首先在相对布局中,在xml顺序中最靠近底部的项目将显示在顶部。因此,您必须在webview下方移动进度条的xml,以便在webview顶部看到该栏。在MyWebViewClient中,您应该覆盖onPageFinished并在该函数内部更改进度条的visibility。您可能希望将对进度条的引用传递给MyWebViewClient的构造函数,以便可以将其设置为可见性。
示例:
public class MyWebViewClient extends WebViewClient {
private ProgressBar pBar;
public MyWebViewClient(ProgressBar pBar)
{
super();
this.pBar = pBar;
}
@Override
public void onPageFinished (WebView view, String url)
{
super.onPageFinished(view, url);
pBar.setVisibility(View.GONE);
}
}
答案 4 :(得分:0)
在您的java代码中,进行以下更改:
// progressDialog = ProgressDialog.show(dialog.getOwnerActivity(), "", "Loading....", true);
//
// wb.setWebChromeClient(new WebChromeClient() {
// public void onProgressChanged(WebView view, int progress)
// {
// MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
// if(progress == 100){
// if(progressDialog.isShowing())
// progressDialog.dismiss();
// }
// }
// });
更改为:
progressDialog = (ProgressDialog) vi.findViewById(R.id.progressbar_horizontal);
wb.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
progressDialog.setProgress(progress * 100); //Make the bar disappear after URL is loaded
if(progress == 100){
if(progressDialog.isShowing())
progressDialog.setVisibility(View.GONE);
}
}
});
答案 5 :(得分:0)