私はこれに似た質問を見ました ここ しかし、私は初心者なので、誰かがこれをWebViewで動作させる方法、または少なくとも10秒の遅延を設定して人々がそれを知る方法を説明できますロード中ですか?
水平プログレスバーの場合、最初にプログレスバーを定義し、onCreate
で次のようにXMLファイルとリンクする必要があります。
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;
_
このブール値は、リンク切れの原因となるWebページのリダイレクトを防ぎます。これで、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が無効な場合、リダイレクトされ、onPageFinished
メソッドの前にonLoadResource()
に到達することがあります。このため、進行状況バーは非表示になりません。これを防ぐために、if (!isRedirected)
のonLoadResource()
をチェックしています。
progress Dialogを閉じる前のonPageFinished()
メソッドで、10秒の遅延コードを書くことができます
それでおしまい。ハッピーコーディング:)
Ms。Sajedul Karim answerによると、私は同じようなものを書きました。
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>
OnViewCreatedのkotlinフラグメント
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)