电子书阅读器上的浏览器 [Day22] 翻译功能 (IV) 内容分页

将网页原文分页翻译

大致上的实作,到上一篇就差不多了。但是在使用几天後发现一个问题,如果文章内容太长的话,常常会发生 Google Translate 网页会显示无法翻译的画面。原因是想要利用 url 的 query string 代入原文的方式,长度上是有限制的。

为了解决这个问题,从 WebView (A) 取得原文後,我设了一个字串长度上限。如果长度超过上限的话,我会在 WebView (B) 上显示一排分页的按钮,一次只显示一定文字长度的翻译结果。

虽然这方式有点麻烦,但总算可以绕过字串长度的问题。下面的函式是用来更新分页按钮的呈现:

    private fun updatePageViews(size: Int) {
        if (size == 1) {
            pageContainer.visibility = GONE
            return
        }

        pageContainer.visibility = VISIBLE
        pageContainer.removeAllViews()

        (pageTextList.indices).forEach { index ->
            val textView = TranslationPageIndexBinding.inflate(LayoutInflater.from(activity)).root
            textView.text = (index + 1).toString()
            textView.tag = index
            val params = LinearLayout.LayoutParams(
                ViewUnit.dpToPixel(activity, 40).toInt(),
                ViewUnit.dpToPixel(activity, 40).toInt()
            )
            textView.setOnClickListener { translatePage(index) }
            pageContainer.addView(textView, params)
        }
        pageContainer.requestLayout()
    }

如果分页只有 1 页的话,并不需要显示按钮列。当分页数目大於 1 时,会产生对应的 TextView 到 container pageContainer 中。

根据网页原文长度来动态调整分页按钮列,让使用者可以方便地切换内容。


<<:  【Day 07】tuple 介绍!

>>:  DAY10: setTimeout和setImmediate的比较

Day 4 资讯结构与阶层分析- (main content + footer)

延续上回~~ 四、再往底下看是主要的Main Content,也就是对於使用者来说目光会停留最久的区...

[Day 29] -『 GO语言学习笔记』- 复合型别 - 切片(Slice) (I)

以下笔记摘录自『 The Go Workshop 』。 切片的核心其实还是阵列,切片只是在阵列外套上...

Day-24 躺着认识Excel Round家族

今日练习档 ԅ( ¯་། ¯ԅ) 来到公式系列的第三天,今日准备的是除法相关的公式,四舍五入、无条件...

Day 24: 架构、解耦 (待改进中... )

「首先,软件架构师也是程序设计师,并持续是个程序设计师。永远不要落入「从程序码中撤离,专注於更高层...

【资料结构】矩阵的相关处理笔记

矩阵的相关处理 目录: 0.前言 1.矩阵设置 2.矩阵相乘 3.稀疏矩阵 4.稀疏矩阵的普通转置 ...