【问题标题】:How to Show the progress bar while the url is loading in WebView Android如何在 WebView Android 中加载 url 时显示进度条
【发布时间】:2015-08-08 09:30:48
【问题描述】:

MainActivity.java
好的,这是我加载 url 的地方,现在进度条在页面加载之前可见,现在当我点击页面上的链接时,进度条没有出现,我正在搜索 10 小时后的修复但它们都不适合这种情况,进度条应该在新的 url 加载时开始。 请帮忙!

public class MainActivity extends Activity {


private WebView mWebView; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.loadUrl("http://google.com/");
    mWebView.setWebViewClient(new com.c.MyAppWebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            findViewById(R.id.progressBar1).setVisibility(View.GONE);

            findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
        }});



}


@Override
public void onBackPressed() {
    if(mWebView.canGoBack()) {
        mWebView.goBack();
    } else {
        super.onBackPressed();
    }
}



public void aus (MenuItem menuItem){

    findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);

     mWebView.loadUrl("http://www.google.com");
    mWebView.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            findViewById(R.id.progressBar1).setVisibility(View.GONE);
        }
    });

}

public void cus (MenuItem menuItem){
    findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);


    mWebView.loadUrl("http://www.google.com");
    mWebView.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            findViewById(R.id.progressBar1).setVisibility(View.GONE);
        }
    });
}

activity_main.xml

<LinearLayout 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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <ProgressBar

        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:indeterminate="false"
        android:layout_gravity="center" />

    <WebView
        android:id="@+id/activity_main_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"/>
</LinearLayout>

【问题讨论】:

  • 你的主布局是什么布局?
  • 线性布局 schemas.android.com/apk/res/android"
  • 网页视图在加载时是否应该消失?
  • 不,我不应该只希望在用户单击任何链接时显示进度

标签: java android xml android-studio webview


【解决方案1】:

如果您只想在加载时将进度条显示在 Web 视图上,请将您的布局更改为 RelativeLayout。将进度条放在底部,以便在视图层次结构的顶部绘制。

<RelativeLayout 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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <WebView
        android:id="@+id/activity_main_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"/>

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="false"
        android:layout_centerInParent="true" />
</RelativeLayout>

您还需要覆盖 webview 客户端上的方法

mWebView.setWebViewClient(new com.c.MyAppWebViewClient() { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
    } 

    @Override 
    public void onPageFinished(WebView view, String url) {
        findViewById(R.id.progressBar1).setVisibility(View.GONE);

        findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
    } 
}); 

【讨论】:

  • 进度条现在不在中间了。
  • 这应该足够了。我更改了 xmlns,所以它应该可以工作
  • 问题只是现在没有居中吗?
  • 不,它现在居中,但没有任何变化,当我点击网页上的网址时它不显示!
  • 没问题,乐于助人!
【解决方案2】:
webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                loadingBar.setVisibility(View.VISIBLE);
                loadingBar.bringToFront();
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                loadingBar.setVisibility(View.GONE);
                super.onPageFinished(view, url);
            }
        });


并将其添加到您的 xml 布局中:

<LinearLayout 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"
   tools:context=".MainActivity"
   android:orientation="vertical">
   <WebView
       android:id="@+id/activity_main_webview"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>
   <LinearLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:gravity="center"
       android:visibility="gone"
       android:id="@+id/purchase_loadingbar">
       <ProgressBar
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"/>
   </LinearLayout>

【讨论】:

  • 请你解释一下如何在我的java代码中实现这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多