【问题标题】:How to display progress bar every time when i load webview in my project?每次在项目中加载 webview 时如何显示进度条?
【发布时间】:2017-12-01 07:19:26
【问题描述】:

我正在使用webview 开发应用程序。现在,即使使用滑动刷新方法,该应用程序也可以正常工作。唯一的事情是我想在每次应用加载 webview 时添加一个进度条。所以请告诉我如何实现它,我尝试了几种方法。

告诉如何添加到这个活动中,我会为剩下的活动实现。

主要活动

package com.haptechinnovations.caffeine.caffeinecoders;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ProgressBar;
import android.widget.Toast;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {



    private WebView mywebView;
    String url = "https://www.youtube.com/caffeinecoders";
    SwipeRefreshLayout mySwipeRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ConstraintLayout toolbarr;
       // SwipeRefreshLayout mSwipeRefreshLayout;
        //mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeToRefresh);
        //mSwipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
        toolbarr = (ConstraintLayout) findViewById(R.id.conmain);

        if (isNetworkAvailable() == true) {


            mywebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = mywebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            mywebView.loadUrl("https://caffeincoder.wordpress.com/");
            mywebView.setWebViewClient(new WebViewClient());
        } else {
            Snackbar snackbar = Snackbar.make(toolbarr, "No Internet Connection..!", Snackbar.LENGTH_LONG)
                    .setAction("RETRY", new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                            Intent i = new Intent(MainActivity.this, MainActivity.class);
                            finish();
                            startActivity(i);
                        }
                    });

            snackbar.setActionTextColor(Color.CYAN);
            snackbar.show();
        }

        mySwipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        if(isNetworkAvailable() ==true){
                            mywebView = (WebView) findViewById(R.id.webview);
                            WebSettings webSettings = mywebView.getSettings();
                            webSettings.setJavaScriptEnabled(true);
                            mywebView.loadUrl("https://caffeincoder.wordpress.com/");
                            mywebView.setWebViewClient(new WebViewClient());
                            mySwipeRefreshLayout.setRefreshing(false);

                        }else{
                            Toast.makeText(MainActivity.this, "You are not connected to Internet", Toast.LENGTH_SHORT).show();
                            mySwipeRefreshLayout.setRefreshing(false);
                        }


                        /*Intent i = new Intent(MainActivity.this, MainActivity.class);
                        finish();
                        startActivity(i);
                        mySwipeRefreshLayout.setRefreshing(false);*/
                    }
                }
        );
       /* mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
               /* Intent i = new Intent(MainActivity.this, MainActivity.class);
                finish();
                startActivity(i);
               mywebView.reload();


            }
        });*/


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }


    @Override
    public void onBackPressed() {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            if (mywebView.canGoBack()) {
                mywebView.goBack();
            } else {
                super.onBackPressed();
            }
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_open) {
                boolean isAppExists;
                isAppExists = isInstalled ("com.google.android.youtube");
                if(isAppExists==true) {
                    Intent i = new Intent("android.intent.action.VIEW", Uri.parse(url));
                    startActivity(i);
                }
                else {
                    Toast.makeText(this, "YouTube App Not Installed", Toast.LENGTH_SHORT).show();
                }
                return true;
            }

            return super.onOptionsItemSelected(item);
        }

    private boolean isInstalled(String uri) {
        PackageManager pm = getPackageManager();
        boolean isIn;
        try{
            pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);
            isIn=true;
        }catch(PackageManager.NameNotFoundException e){
            isIn=false;
        }
        return isIn;
    }


    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_youtube) {
            Intent intent=new Intent(MainActivity.this,youtube.class);
            startActivity(intent);


            // Handle the camera action
        } else if (id == R.id.nav_facebook) {
            Intent intent=new Intent(MainActivity.this,facebook.class);
            startActivity(intent);

        } else if (id == R.id.nav_about) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

contentmain.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/conmain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.haptechinnovations.caffeine.caffeinecoders.MainActivity"
    tools:showIn="@layout/app_bar_main">
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <WebView
                android:id="@+id/webview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="0dp"
                android:paddingLeft="0dp"
                android:paddingRight="0dp"
                android:paddingTop="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent" />



        </android.support.v4.widget.NestedScrollView>

    </android.support.v4.widget.SwipeRefreshLayout>



</android.support.constraint.ConstraintLayout>

【问题讨论】:

  • 这个问题已经问过了,请参考stackoverflow.com/questions/16849347/…
  • 在 onRefresh 方法中如果连接可用代码删除额外的代码。只留下 webviewloadurl 和 setrefreshing 错误代码
  • 它可能看起来是重复的,但我这里的上下文是不同的。所以我可以期待解决方案吗?而不是建议?谢谢。
  • @Bek 是的,我做到了。

标签: java android progress-bar android-webview android-studio-3.0


【解决方案1】:

只需为您的WebView 设置一个WebChromeClient 并隐藏WebView 而进度,当进度达到100 时显示。每当您的WebView 加载时,它将显示ProgressBar

yourWebView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            view.setVisibility(View.GONE);
            yourProgressbar.setVisibility(View.VISIBLE);

            if(progress == 100){
                    yourProgressbar.setVisibility(View.GONE);
                    view.setVisibility(View.VISIBLE);

            }
        }
    });

【讨论】:

  • 我不知道该怎么做!但我确实明白其中的逻辑。如果您可以尝试将其添加到我的上述代码中,这将非常有帮助。谢谢。期待你能帮助我。
【解决方案2】:
 ProgressBar progressbar= (ProgressBar ) findViewById(R.id.progress_view);
    progressbar.setVisibility(View.VISIBLE);
 WebView mWebView = (WebView) findViewById(R.id.webview);
    if (getIntent().getStringExtra("url") != null)
        mWebView.loadUrl(getIntent().getStringExtra("url"));
    mWebView.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            progressbar.setVisibility(View.GONE);
            mWebView.setVisibility(View.VISIBLE);
        }
    });

通过使用上面的代码,您的 webview 将被显示,然后您可以隐藏进度条。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多