期待了很久,一直不知道怎麼實作的功能終於做出來了!在 Android WebView中,一般來說,只可以長按非連結的文字,選取文字進行複製或其他的動作。如果想要選取連結上的文字的話,必須要用些小技巧才能達成。

下面的 sequence diagram 說明了如何透過一系列的操作達到這效果。

步驟

  • 在網頁載入完成後,要塞一段程式去偵測文字選取範圍改變時的區域
  • 當下達指令要選取連結文字時,要把點擊處的 a node 的 href 屬性拿掉
  • 再模擬一次長按的行為 (simulateLongClick())
  • 等選取好連結字串後,再回復原先 a element 中的 href 屬性

接著再改善

  • 把原先的 ActionMode DialogFragment 變成是Compose 的 Dialog,讓它不會對 ActionMode selection anchor 的顯示造成影響
  • 自行處理視窗超出畫面的問題
  • 第一步中的 udpateSelectionRection() 會回傳 Selection Range 的 position,可以用來調整 Context Menu 的位置

View gist

View gist

View gist

相關連結

Release Release v10.16.0 · plateaukao/einkbro