Android WebView加载网页、html文件显示加载进度

一、视图绑定

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。

在大多数情况下,视图绑定会替代 findViewById。

视图绑定功能可按模块启用。要在某个模块中启用视图绑定,请将 viewBinding 元素添加到其 build.gradle 文件中,如下例所示:

    viewBinding {
        enabled = true
    }

二、新建加载WebViewActivity

新建WebViewActivity加载网页html文件

class WebViewActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

页面xml文件activity_web_view如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto">

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

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@null"
        android:indeterminateOnly="false"
        android:max="100"
        app:layout_constraintTop_toTopOf="parent"
        android:progressDrawable="@drawable/progress_bar_horizontal"/>

</androidx.constraintlayout.widget.ConstraintLayout>

进度条progress_bar_horizontal.xml样式如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@color/white"/>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <gradient
                    android:angle="270"
                    android:centerColor="#00923F"
                    android:centerY="0.75"
                    android:endColor="#888C98"
                    android:startColor="#00923F" />
            </shape>
        </clip>
    </item>

</layer-list>

三、在 Activity 中使用视图绑定

在 Activity 的 onCreate() 方法中执行以下步骤:

1、调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
2、通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
3、将根视图传递到 setContentView(),使其成为屏幕上的活动视图。

class WebViewActivity : AppCompatActivity() {
    private lateinit var mViewBinding: ActivityWebViewBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mViewBinding = ActivityWebViewBinding.inflate(layoutInflater)

        setContentView(mViewBinding.root)
        
    }
}

四、设置WebView

class WebViewActivity : AppCompatActivity() {
    private lateinit var mViewBinding: ActivityWebViewBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mViewBinding = ActivityWebViewBinding.inflate(layoutInflater)

        setContentView(mViewBinding.root)

        val webSettings = mViewBinding.webView.settings
        webSettings.javaScriptEnabled = true
        webSettings.domStorageEnabled = true //支持webView从localStorage中读取数据

        mViewBinding.webView.webChromeClient = object : WebChromeClient() {  // 设置加载进度
            override fun onProgressChanged(view: WebView?, newProgress: Int) {
                mViewBinding.progressBar.progress = newProgress
                if (newProgress == 100) {
                    mViewBinding.progressBar.visibility = View.GONE
                } else {
                    mViewBinding.progressBar.visibility = View.VISIBLE
                }
                super.onProgressChanged(view, newProgress)

            }
        }

        mViewBinding.webView.loadUrl("https://www.baidu.com");
    }
}

清单文件中添加网络权限

    <uses-permission android:name="android.permission.INTERNET" />

运行就可以看到加载进度条了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,你可以通过使用 `WebChromeClient` 和 `ProgressBar` 实现 WebView进度条。这里是一个简单的示例: 1. 首先,在你的布局文件中添一个 `ProgressBar` 组件: ```xml <ProgressBar android:id="@+id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="false" android:max="100" android:progress="0" android:visibility="invisible" /> ``` 在这个示例中,我们设置了 `ProgressBar` 的最大值为 100,初始进度为 0,不显示动画,并且默认是不可见的。 2. 在你的 Activity 类中,设置 WebView 的 WebChromeClient,并实现 `onProgressChanged()` 方法来更新进度条的进度。 ```java WebView myWebView = findViewById(R.id.webview); ProgressBar progressBar = findViewById(R.id.progressBar); myWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); // 更新进度条的进度 progressBar.setProgress(newProgress); // 如果进度条已经满了,隐藏进度条 if (newProgress == 100) { progressBar.setVisibility(View.INVISIBLE); } else { progressBar.setVisibility(View.VISIBLE); } } }); myWebView.loadUrl("https://www.example.com"); ``` 在这个示例中,我们设置了 WebView 的 `WebChromeClient`,并重写了 `onProgressChanged()` 方法。在每次进度发生变化时,我们通过 `setProgress()` 方法更新进度条的进度,并根据进度是否为 100 来显示或隐藏进度条。 注意:如果你的应用程序使用了 Material Design,你可以使用 `ProgressBar` 的 `indeterminateDrawable` 属性来设置进度条的样式。你可以使用 `@drawable/progress_indeterminate_material` 来使用 Material Design 风格的进度条。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值