我曾在这里看到过类似的问题,但由于我是新手,所以有人可以解释如何使其在WebView中工作,或者至少如何设置10秒的延迟时间,以便人们知道它正在加载吗?
我曾在这里看到过类似的问题,但由于我是新手,所以有人可以解释如何使其在WebView中工作,或者至少如何设置10秒的延迟时间,以便人们知道它正在加载吗?
Answers:
对于水平进度条,您首先需要定义进度条并将其与XML文件链接,如下所示onCreate
:
final TextView txtview = (TextView)findViewById(R.id.tV1);
final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1);
然后,您可以在WebChromeClient中使用onProgressChanged方法:
MyView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if(progress < 100 && pbar.getVisibility() == ProgressBar.GONE){
pbar.setVisibility(ProgressBar.VISIBLE);
txtview.setVisibility(View.VISIBLE);
}
pbar.setProgress(progress);
if(progress == 100) {
pbar.setVisibility(ProgressBar.GONE);
txtview.setVisibility(View.GONE);
}
}
});
之后,在您的布局中,您将得到如下内容
<TextView android:text="Loading, . . ."
android:textAppearance="?android:attr/textAppearanceSmall"
android:id="@+id/tV1" android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="#000000"></TextView>
<ProgressBar android:id="@+id/pB1"
style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_centerVertical="true"
android:padding="2dip">
</ProgressBar>
这就是我在应用程序中所做的事情。
我刚刚在这里找到了一个很好的示例:http : //developer.android.com/reference/android/webkit/WebView.html。您只需要从以下方式更改setprogress:
activity.setProgress(progress * 1000);
至
activity.setProgress(progress * 100);
这是在Android Web View中添加进度栏的最简单方法。
在活动/片段中添加一个布尔字段
private boolean isRedirected;
这个布尔值将防止由于链接失效而导致的网页重定向。现在,您只需将WebView对象和Web Url传递给此方法即可。
private void startWebView(WebView webView,String url) {
webView.setWebViewClient(new WebViewClient() {
ProgressDialog progressDialog;
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
isRedirected = true;
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
isRedirected = false;
}
public void onLoadResource (WebView view, String url) {
if (!isRedirected) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(SponceredDetailsActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
}
}
public void onPageFinished(WebView view, String url) {
try{
isRedirected=true;
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}catch(Exception exception){
exception.printStackTrace();
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
}
在这里,当开始加载时它将调用onPageStarted
。在这里我设置布尔字段为false。但是,当页面加载完成时,它将进入onPageFinished
方法,并且此处布尔字段设置为true。有时,如果url无效,它将被重定向,并到达 methodonLoadResource()
之前 onPageFinished
。因此,它不会隐藏进度条。为了防止这种情况,我正在签if (!isRedirected)
入onLoadResource()
在onPageFinished()
关闭进度对话框之前,您可以在方法中编写10秒的延时代码
而已。快乐的编码:)
shouldOverrideUrlLoading
和onLoadResource
,移动的进度开始onPageStarted
。还添加onReceivedError
并写了进度结束和祝酒消息。
根据Sajedul Karim博士的回答,我写了一篇类似的文章。
webView = (WebView) view.findViewById(R.id.web);
progressBar = (ProgressBar) view.findViewById(R.id.progress);
webView.setWebChromeClient(new WebChromeClient());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
setProgressBarVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
setProgressBarVisibility(View.GONE);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Toast.makeText(getActivity(), "Cannot load page", Toast.LENGTH_SHORT).show();
setProgressBarVisibility(View.GONE);
}
});
webView.loadUrl(url);
private void setProgressBarVisibility(int visibility) {
// If a user returns back, a NPE may occur if WebView is still loading a page and then tries to hide a ProgressBar.
if (progressBar != null) {
progressBar.setVisibility(visibility);
}
}
没错,还有更完整的选项,例如更改所需句子的应用程序名称。查看本教程可以帮助您:
http://www.firstdroid.com/2010/08/04/adding-progress-bar-on-webview-android-tutorials/
在该教程中,您有一个完整的示例,说明如何在Webview应用程序中使用进度条。
阿德里安
这就是我与Kotlin一起完成的工作,以显示进度百分比。
我的片段布局。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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:layout_marginLeft="32dp"
android:layout_marginRight="32dp"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/progressBar"/>
</FrameLayout>
我的kotlin片段在onViewCreated中
progressBar.max = 100;
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
progressBar.progress = newProgress;
}
}
webView!!.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
progressBar.visibility = View.VISIBLE
progressBar.progress = 0;
super.onPageStarted(view, url, favicon)
}
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
view?.loadUrl(url)
return true
}
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view?.loadUrl(request?.url.toString())
}
return true
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
progressBar.visibility = View.GONE
}
}
webView.loadUrl(url)