2

URL을로드하는 동안 진행률 표시 줄을 표시 할 수 있습니까? 나는 progressbar의 진도를 보여줄 필요가있다. 나는 progressbar를 사용할 수있다. 하지만 얼마나 많은 URL이로드되었는지 정확하게 파악할 수있는 코드를 찾을 수 없습니다. 이것은 현재 코드입니다 :WebView에 URL을로드하는 동안 ProgressBar 표시

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    browser = (WebView)findViewById(R.id.webView1); 
    progressBar = (ProgressBar)findViewById(R.id.progressBar); 
    browser.setWebViewClient(new MyBrowser()); 
    browser.setWebChromeClient(new MyCustomChromeClient()); 
    mContext=this.getApplicationContext(); 
    browser.loadUrl(target_url); 
    MainActivity.this.progressBar.setProgress(0); 
} 

private class MyBrowser extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     String host = Uri.parse(url).getHost(); 
     if (host.equals(target_url_prefix)) 
     { 
      if(mWebviewPop!=null) 
      { 
       mWebviewPop.setVisibility(View.GONE); 
       baseLayout.removeView(mWebviewPop); 
       mWebviewPop=null; 
      } 
      return false; 
     } 

     if(host.equals("m.facebook.com")) 
     { 
      return false; 
     } 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onReceivedError(WebView view, int errorCode, 
           String description, String failingUrl) { 
     noInternet(); 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     visible(); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     unvisible(); 
     System.out.println("\n" +view.getUrl()); 
     if(url.startsWith("https://m.facebook.com/v2.1/dialog/oauth")){ 
      if(mWebviewPop!=null) 
      { 
       mWebviewPop.setVisibility(View.GONE); 
       baseLayout.removeView(mWebviewPop); 
       mWebviewPop=null; 
      } 
      view.loadUrl(redirectUrl); 
      return; 
     } 
     super.onPageFinished(view, url); 
    } 
} 

private class MyCustomChromeClient extends WebChromeClient 
{ 

    @Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, 
            boolean isUserGesture, Message resultMsg) { 
     mWebviewPop = new WebView(mContext); 
     mWebviewPop.setVerticalScrollBarEnabled(false); 
     mWebviewPop.setHorizontalScrollBarEnabled(false); 
     mWebviewPop.setWebViewClient(new MyBrowser()); 
     mWebviewPop.getSettings().setJavaScriptEnabled(true); 
     mWebviewPop.getSettings().setSavePassword(false); 
     mWebviewPop.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.MATCH_PARENT)); 
     baseLayout.addView(mWebviewPop); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(mWebviewPop); 
     resultMsg.sendToTarget(); 

     return true; 
    } 

    @Override 
    public void onCloseWindow(WebView window) { 
    } 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     MainActivity.this.setValue(newProgress); 
     super.onProgressChanged(view, newProgress); 
    } 
} 
public void setValue(int progress) { 
    this.progressBar.setProgress(progress); 
} 
} 

URL 로딩의 정확한 진행 방법. 이 코드를 사용하면 진행 막대를로드 할 수 있지만 불확실한 진행률 막대로 표시됩니다. 나는 사용자 정의보기 인 progressbar를 보여주고 싶다. URL이 성공적으로로드 된 비율을 표시해야합니다. 그래서 maye 내가 사용자 정의보기를 부풀릴 수 있지만 다시 정확한 비율을 얻는 방법을 모르겠다. 누군가이 코드를 도와 줄 수 있습니까?

답변

3

WebChromeClient의 onProgressChanged()는 페이지 로딩 상태에 대한 진행 상황을 제공합니다. android API 문서의 함수에 대한 아래 정보를 참조하십시오.

public void onProgressChanged (WebView view, int newProgress) 

Added in API level 1 
Tell the host application the current progress of loading a page. 

Parameters 
view The WebView that initiated the callback. 
newProgress Current page loading progress, represented by an integer between 0 and 100. 
+0

고마워 :) 정확히 내가 필요한 대답 :) –

1

웹보기에 익숙하지 않습니다. 하지만 doInBackground AsyncTask ussualy URL을 엽니 다. 그래서 이것을 직접 백분율로 표현할 수있는 방법을 찾을 수 없습니다. 그러나 당신이 할 수있는 일은 어쩌면 주위에 속일 수 있습니다.

Set 20% when your app has confirmed that there is a INTERNET connection enables on the Device. 
Set 50% when it reaches the AsyncTask to open URL (or however you initialize .connect()) 
And finally set 100% when URL is opened. 

이것은 가짜 방법입니다. 하지만 그렇지 않으면 어떻게 든 Time (초)으로 작업해야합니다. 그러나 앱은 URL을 열어야하는 시간을 예측할 수 없습니다. 100 %는 URL을 여는 데 필요한 초를 나타내지 만, URL을로드하는 동안 액세스 할 수 없습니다. App은 그 시간에 URL을 여는 데 필요한 양을 알지 못하므로 액세스 할 수 없습니다.

테스트를 실행하고 초를 맞출 수 있습니다. URL을 열 때 타이머를 설정하고 타이머를 열 때 타이머를 중지하십시오. 그러나 그 시간은 그 특별한 경우에 불과할 것입니다. 누군가가 느린 Android 기기를 사용하거나 잘못된 인터넷 연결을 사용하면 아마 오래 걸릴 것입니다.

희망은 제 답변이 조금 도움이 되었어요. 좀 더 정확하게 뭔가를하는 방법이 있다면, 여기 사람들이 그것을 쓸 것이라고 확신합니다.

+0

감사합니다. 나는 또한 타이머를 생각했습니다. 그러나 그것은 다른 장치에서 다를 수 있습니다. 아이디어를 가져 주셔서 감사합니다. –

관련 문제