Android WebView 진행률 표시 줄
나는 이것과 비슷한 질문을 여기에서 보았지만 초보자이기 때문에 누군가 WebView에서 이것을 작동시키는 방법 또는 적어도 10 초의 시간 지연을 설정하는 방법을 설명하여 사람들이 로딩 중임을 알 수 있습니까?
수평 진행률 표시 줄의 경우 먼저 진행률 표시 줄을 정의하고 다음과 같이 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 개체와 웹 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
. 여기에서 Boolean 필드를 설정하면 false입니다. 그러나 페이지로드가 완료되면 onPageFinished
메서드에 도달 하고 여기에서 Boolean 필드가 true로 설정됩니다. 때로는 URL이 죽으면 리디렉션되고 메소드 onLoadResource()
이전에 올 것입니다 onPageFinished
. 이러한 이유로 진행률 표시 줄을 숨기지 않습니다. 이를 방지하기 위해 체크인 if (!isRedirected)
중입니다.onLoadResource()
onPageFinished()
진행률 대화 상자를 닫기 전에 메서드 에서 10 초 시간 지연 코드를 작성할 수 있습니다.
그게 다야. 해피 코딩 :)
Md. 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);
}
}
It's true, there are also more complete option, like changing the name of the app for a sentence you want. Check this tutorial it can help:
http://www.firstdroid.com/2010/08/04/adding-progress-bar-on-webview-android-tutorials/
In that tutorial you have a complete example how to use the progressbar in a webview app.
Adrian.
This is how I did it with Kotlin to show progress with percentage.
My fragment layout.
<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>
My kotlin fragment in 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)
wait until the process is over ...
while(webview.getProgress()< 100){}
progressBar.setVisibility(View.GONE);
webview= (WebView) findViewById(R.id.web);
webview.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
WebActivity .setTitle("Loading...");
WebActivity .setProgress(progress * 100);
if(progress == 100)
WebActivity .setTitle(R.string.app_name);
}
});
webview.setWebViewClient(new WebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://google.com");
For more reference click here http://androiddhina.blogspot.in/2015/05/android-load-webview-with-progressbar.html
참고URL : https://stackoverflow.com/questions/2537454/android-webview-progress-bar
'developer tip' 카테고리의 다른 글
Elixir에서 맵 키를 문자열에서 원자로 변환하는 방법 (0) | 2020.11.13 |
---|---|
내 우분투 도커 이미지에 "ifconfig"명령을 설치하는 방법은 무엇입니까? (0) | 2020.11.13 |
Perl의 STDIN 또는 입력 파일에서 프로그래밍 방식으로 읽기 (0) | 2020.11.13 |
엔티티를 읽기 전용으로 만드는 방법은 무엇입니까? (0) | 2020.11.13 |
Android x86 화면 해상도 전환 (0) | 2020.11.13 |