我正在尝试使用WebViewClient在android webview中添加进度条。它显示进度条,文本(正在加载),其余页面只是空白页面。
我想在加载下一页时保留当前页面,并在当前页面的顶部显示进度条,以便用户不必看到空白的加载页面。
有人可以帮我吗?如何在顶部显示进度条的同时保持当前页面的摄入量,直到加载下一页为止。
答案 0 :(得分:1)
这可能会有所帮助,来源:ProgressBar with WebView
您可以通过getProgress类中的webview方法来跟踪进度状态。
初始化进度状态
private int mProgressStatus = 0;
然后使用AsyncTask这样加载:
private class Task_News_ArticleView extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(
your_class.this);
// can use UI thread here
protected void onPreExecute() {
this.dialog.setMessage("Loading...");
this.dialog.setCancelable(false);
this.dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
while (mProgressStatus < 100) {
mProgressStatus = webview.getProgress();
}
} catch (Exception e) {
}
return null;
}
protected void onPostExecute(Void result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
答案 1 :(得分:0)
public class About extends AppCompatActivity {
WebView myWebView;
ProgressBar progressBar;
FrameLayout frameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("About CreativeGraphy");
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
progressBar = findViewById(R.id.progress_bar);
frameLayout = findViewById(R.id.frame_loading);
progressBar.setMax(100);
myWebView = findViewById(R.id.webview);
myWebView.loadUrl("http://www.google.co.in/");
myWebView.setWebViewClient(new HelpClient());
myWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
frameLayout.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
setTitle("Loading....");
if (newProgress == 100) {
frameLayout.setVisibility(View.GONE);
//setTitle(View.getTitle());
}
super.onProgressChanged(view, newProgress);
}
});
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setVerticalScrollBarEnabled(false);
progressBar.setProgress(0);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}//close activity when click back button
return super.onOptionsItemSelected(item);
}
public void onBackPressed() {
if (myWebView.canGoBack()) {
myWebView.goBack();
} else {
super.onBackPressed();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
if (myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
private class HelpClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
frameLayout.setVisibility(View.VISIBLE);
return true;
}
}
}
尝试一下 它已加载
布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".About">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/ToolbarColoredBackArrow" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/frame_loading"
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_below="@id/app_bar"
android:background="@android:color/transparent">
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="8dp"
android:layout_gravity="top"
android:layout_marginTop="-3dp"
android:background="@android:color/transparent"
android:progress="20"
android:progressDrawable="@drawable/progress_cyclic" />
</FrameLayout>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/frame_loading" />
</RelativeLayout>
尝试使用2个webview,如果100%加载的可见,则其他第一个保留,而第二个web视图开始加载时,其余的将保留