iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
Mobile Development

從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車系列 第 4

[Day4] 從開發瀏覽器 APP 學習實戰技巧 -- 雙開:同時顯示兩個網頁

  • 分享至 

  • xImage
  •  

安裝 NAVER 開發的瀏覽器 Whale 時,發現它有一個很好用的功能:可以同時在電腦畫面上顯示兩個網頁的內容,而且可以設定在其中一個網頁點擊任何連結時,都用另一邊來開啟。

https://ithelp.ithome.com.tw/upload/images/20220915/20140260bCvekwNXtS.jpg

這種使用方式很適合在看新聞或是某些由 listview 要帶到 detailview 的場景。在 Android 的世界中,如果使用的是平板的話這功能就可以用來一邊開啟想要學習的網頁,另一邊開啟字典之類的網站。

雖然類似的功能有機會利用 Android 的 Multi-Window 來達成,但因為目前有支援 Multi-Window 的電子書閱讀器只有文石(ONYX),而且它是固定只能在畫面正中間切割,不能自行調整兩邊視窗的大小。所以,如果在 EinkBro 中也能支援同時顯示兩個網頁的話,應該就可以滿足我要的需求。

開發

在 EinkBro APP 中已經開發過兩個畫面的元件了: TwoPaneLayout ,而且為了要支援全文翻譯的功能,有再把它包裝到 TranslationViewController 中,幫忙處理第二個畫面的隱藏顯示,或是左右換邊,轉換成上下切割等功能。(詳情請看下面去年的這篇文章)

電子書閱讀器上的瀏覽器 [Day23] 雙視窗可拖拉調整大小元件

在這個基礎上,要支援顯示不同的網頁內容就容易多了。首先是先把原本的 TranslationViewController 改名為 TwoPaneController ,因為接下來它除了要支援原本的翻譯功能外,還要負責用來顯示其他的網頁內容。雖然這樣寫有點打破 Single Purpose 的原則,但我不想要重覆太多的程式碼再生一個 class ,也不想要花時間抽出這兩者的共同部分用繼承的方式。所以,我選了最簡單的方式,在既有的 class 中加入相關的功能,並且把 class 名稱改得更 generic 一些。

https://ithelp.ithome.com.tw/upload/images/20220916/20140260msubxtyNyD.png

第一版的功能比較陽春一點,我在到處可以開啟的選單(書籤、歷史記錄、長按連結)中多了個按鈕 Split Screen。只要你想開啟網頁的地方,都多了這個按鈕可以將第二個畫面叫出來,並載入新的網址。

調整 TwoPaneController 中的實作

原先有些按鈕是要給翻譯用的,所以如果第二個畫面被用來顯示一般網頁時,必須要隱藏一些按鈕。

https://ithelp.ithome.com.tw/upload/images/20220915/20140260MNSBQ9q7ej.png

差不多這樣小改一下,功能就完成了!

示範畫面

https://ithelp.ithome.com.tw/upload/images/20220915/20140260193Xob5aIV.jpg
(左邊是 Naver Webtoon 網站的漫畫;右邊是 Naver dict 網站,用來查詢不會的韓文單字)

示範影片

Youtube link


上一篇
[Day3] 從開發瀏覽器 APP 學習實戰技巧 -- Android 必備組合技: Room + Flow + ViewModel
下一篇
[Day5] 從開發瀏覽器 APP 學習實戰技巧 -- 儲存 epub 文件的流程改善
系列文
從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言