Android TV開發---WebView焦點處理

背景

開發的Android TV應用時,有一個做題模塊用到了WebView做爲題目和選項的展示容器

 

問題

對於正常的文字內容來說,在相應元素中使用tabindex屬性即可實現焦點的簡單控制,但是此處展示的題目和選項會涉及到公式,相應位置已用MathJax做了轉換,經過轉換後用圖形化的公式替代了文字符號描述,在焦點控制上就出現了問題,這些公式會獲取到焦點,導致遙控器在選項間切換時焦點會跳到公式上,無法正確切換選項

 

解決過程

剛開始的時候嘗試了tabindex以及各種屬性試圖讓內容無法獲取焦點,均告失敗

嘗試手動控制焦點的切換

 

1. 監聽遙控器按鍵輸入

問題:開始是在js中做了監聽,發現按鍵的響應要到WebView上需要多按一次按鍵才行

解決:改爲在activity中監聽按鍵輸入

 

2. 通過id獲取到元素,調用focus方法獲取焦點

問題:即使手動控制焦點的切換,公式仍舊會獲取到焦點

解決:在這一塊卡了很久,其實想想是鑽了牛角尖了,太過糾結於公式和選項之間焦點的交互,在禁用了WebView獲取焦點後,即便公式也是無法再獲得焦點了,最終的焦點就能由自己手動控制了,此處焦點禁用使用clearFocus()方法,在監聽每次按鍵時執行

 

3. 通過WebView和原生代碼的交互,對應按鍵按下時做選項的焦點控制

問題:由於清除了WebView的焦點,在按ok鍵確定選擇時,js的onclick方法失效

解決:監聽上下按鍵時記錄下當前焦點所在的選項,在按下ok鍵時根據記錄下的選項做下一步的操作

 

4. 確定選項後會判斷對錯並給出解答,焦點移動到WebView上後,長按下鍵可以滾動WebView查看

問題:查看完以後,選擇跳轉下一題,題幹上方出現一大片空白

解決:嘗試了各種scroll滾動,都不太滿意,查看解答部分出現的代碼,是調用了SlideDown方法,而在新題初始化後調用的是hide方法隱藏瞭解答部分,導致頁面高度突然改變,出現空白,將hide換做SlideUp方法,雖然會有解答部分隱藏的畫面,但問題算是解決了,後續可以在控制SlideUp的速度,或者獲取到題幹距離頂部的距離,調用window的scrollTo方法滾動頂部

 

總結

差不多就這些,其中還有些關於焦點的小細節不再贅述,最重要的是跳出思維定勢,把握主要矛盾,靈活運用各種api

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章