Android WebView(带进度框)的使用方法

在开发中我们经常遇到需要一个网页(htm5)来展示我们的界面或者需要一个静态的本地h5界面 那我们怎么来把这个地址镶嵌进我们的应用的 WebView为我们提供了便利

***支持进度条
***支持返回
***支持网络判断
***支持点击两次退出

第一步添加权限

<uses-permission android:name="android.permission.INTERNET" />//网络请求

第二步添加布局

<?xml version="1.0" encoding="utf-8"?>
<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"
        android:orientation="vertical">


    <FrameLayout
            android:id="@+id/fm"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone">

        <WebView
                android:id="@+id/wb"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

        </WebView>

        <ProgressBar
                android:id="@+id/probar"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_gravity="center" />

        <TextView
                android:id="@+id/tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="1" />
    </FrameLayout>

    <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical">

        <ImageView
                android:id="@+id/ima"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/b" />

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="无网络连接,请检查网络"
                android:textColor="#000000" />
    </LinearLayout>
</LinearLayout>

第三步 使用

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        wb.webViewClient = WebViewClient()
        var settings = wb.getSettings();
        settings.javaScriptEnabled = true
        settings.databaseEnabled = true

        settings.setGeolocationEnabled(true)
        settings.setGeolocationDatabasePath(application.getDir("database", Context.MODE_PRIVATE).path)
        settings.domStorageEnabled = true;
        if (isNetworkConnected(this)) {
            wb.loadUrl("http://www.baidu.com")
         
            ll.visibility = View.GONE
            fm.visibility = View.VISIBLE
        } else {
            ll.visibility = View.VISIBLE
            fm.visibility = View.GONE
        }
        wb.webChromeClient = object : WebChromeClient() {
            override fun onProgressChanged(view: WebView, progress: Int) {
                if (progress == 100) {
                    probar.visibility = View.GONE
                    tv.visibility = View.GONE
                } else {
                    probar.visibility = View.VISIBLE
                    tv.visibility = View.VISIBLE
                    tv.text = progress.toString()
                }
            }
        }

    }

    fun isNetworkConnected(context: Context): Boolean {
        if (context != null) {
            var mConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            var mNetworkInfo = mConnectivityManager.getActiveNetworkInfo()
            if (mNetworkInfo != null) {
                return mNetworkInfo!!.isAvailable()
            }
        }
        return false
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {

        if (keyCode == KeyEvent.KEYCODE_BACK && wb.canGoBack()) {
            wb.goBack();//返回上个页面
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            for2Click()
            return true;
        }
        return super.onKeyDown(keyCode, event)
    }

    var isExit: Boolean = false

    private fun for2Click() {
        var tExit: Timer? = null
        if (!isExit) {
            isExit = true // 准备退出
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show()
            tExit = Timer()
            tExit.schedule(object : TimerTask() {
                override fun run() {
                    isExit = false
                }


            }, 2000) // 2秒

        } else {
            finish()
            System.exit(0)//finish();
        }
    }
}

好了 我在里面做了一个网络的判断 和点击两下退出功能,另外里面加了一个简易的进度条,小伙伴们可以自定义一个漂亮的

猜你喜欢

转载自blog.csdn.net/qq_28643195/article/details/107835218