IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android笔记(十九):WebView浏览器多标签页功能新的实现 -> 正文阅读

[移动开发]Android笔记(十九):WebView浏览器多标签页功能新的实现

效果图

在这里插入图片描述

背景

之前写过的文章——WebView+Fragment+ViewPager构建浏览器多标签页
虽然实现了多标签页的功能,但是有个弊端就是随着创建的标签页数量增加,viewpager的滑动会越来越卡。之前一直没有时间优化,最近尝试着优化了一下,对Dainty浏览器的多标签页功能抽取出来,进行改造。

思路

在这里插入图片描述
WebTabManager用于管理tab页面对象

class WebTabManager private constructor(){

    private object Holder{
        val instance = WebTabManager()
    }

    companion object Instance {
        var increaseKey = 0
        @JvmStatic
        fun getInstance(): WebTabManager{
            return Holder.instance
        }
    }

    private val cacheWebTab = LinkedList<WebBean>()

    fun divideAllWebView(){
        LogUtil.d("divideAllWebView: ${cacheWebTab.size}")
        for (wb in cacheWebTab){
            wb.webView.parent?.let {
                (it as ViewGroup).removeAllViews()
            }
        }
    }

    fun getCacheWebTab(): List<WebBean>{
        return cacheWebTab
    }

    fun addNewTab(): WebBean {
        val webView = CommonWebView(MutableContextWrapper(Dainty2Application.app))
        val wb = WebBean(increaseKey++, webView, "首页", ContextCompat.getDrawable(Dainty2Application.app, R.drawable.web_tab_icon_home), ContextCompat.getDrawable(Dainty2Application.app, R.drawable.ic_launcher_foreground))
        cacheWebTab.add(wb)
        return wb
    }

    fun joinWebTabToLast(key: Int){
        for (wb in cacheWebTab){
            if (wb.id == key){
                cacheWebTab.remove(wb)
                cacheWebTab.addLast(wb)
                break
            }
        }
    }

    fun updateLastTabTitle(tabTitle: String){
        val wb = cacheWebTab.last
        wb.tabTitle = tabTitle
    }

    fun updateLastTabIcon(tabIcon: Drawable){
        val wb = cacheWebTab.last
        wb.tabIcon = tabIcon
    }
}

tab页面对象,保存了webview对象,网页icon和标题,网页截图

data class WebBean(val id: Int, val webView: CommonWebView, var tabTitle: String,
                   var tabIcon: Drawable?, var picture: Drawable?)

用于获取网页截图

    fun catchWebView(context: Context){
        val capture = WebTabManager.getInstance().getCacheWebTab().last().webView
        capture.isDrawingCacheEnabled = true
        val bitmap = capture.drawingCache
        WebTabManager.getInstance().getCacheWebTab().last().picture = BitmapDrawable(context.resources, bitmap).current
    }

具体可参考:Dainty2

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:29:58  更:2022-05-05 11:34:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:04:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码