Android 在弹出窗口中显示进度条
我有一个弹出对话框,其中我正在加载一个网络视图。我想在webview加载到弹出窗口顶部时显示进度条。 我找到了一种在网页加载时显示加载进度条的方法,但是如果在弹出对话框中加载此webview,则进度条不会显示在其顶部。 有人能解释一下发生这种情况的原因吗 这是密码 [守则]Android 在弹出窗口中显示进度条,android,Android,我有一个弹出对话框,其中我正在加载一个网络视图。我想在webview加载到弹出窗口顶部时显示进度条。 我找到了一种在网页加载时显示加载进度条的方法,但是如果在弹出对话框中加载此webview,则进度条不会显示在其顶部。 有人能解释一下发生这种情况的原因吗 这是密码 [守则] @SuppressWarnings("static-access") public void showPopUp(String url){ try{ Dia
@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());
}
}
<?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>
[/code]
它不工作,所以我评论它
link_popup.xml
[守则]
@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());
}
}
<?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>
[/code]或者,您可以在清单文件中使用以下命令使您的活动看起来像一个对话框: 在活动标签中
android:theme="@android:style/Theme.Dialog"
然后你可以在页面加载时,在你的活动中使用async task
显示进度条
希望这有帮助此类将显示一个包含webview的对话框,该对话框将在每次加载网页/网站时显示微调器/进度
/**
* @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();
}
}
}
我没有看过你的代码,但是如果你看一下xml,你有一个RelativeLayout,一个ProgesBar和一个WebView 当它膨胀时,它将首先绘制RelativeLayout,然后绘制ProgesBar,最后绘制WebView。由于您的webview在宽度和高度上都有填充,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>
首先,在相对布局中,XML顺序中最靠近底部的项目将显示在顶部。因此,您必须将进度条的XML移动到webview下方,以便可以看到webview顶部的进度条。在您的
MyWebViewClient
中,您应该重写该函数,并在该函数中将进度条的更改为GONE
。您可能希望将对进度条的引用传递到构造函数中,以便MyWebViewClient
可以使用它将可见性设置为GONE
例如:
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);
}
}
在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);
}
}
});
使用“进度”对话框,
检查这几页
还是这个
否我想在代码中注释时动态显示进度条。