androidwebview嵌套
Ⅰ android scrollview嵌套webview和listview,怎麼滑動不卡頓
只要是listview上下滑動卡頓,其主要原因是因為在listview填充適配器的時候。在重寫的類BaseAdapter方法
getView();被無限的循環的調用;這樣消耗了大量的內存導致listview上下滑動的時候,出現了卡頓。原因就在於measure過
程,ListView一般都會根據屏幕載入多個Item,而且也會同時顯示這些已經載入過的若干組Item,而這些Item的父元素都是這個
ListView。
通過Google的解釋:View在Draw的時候分成兩個階段:measure和layout,在measure階段時主要就是為了計算兩個參
數:height和width。而且要注意的是,這是個遞歸的過程,從頂向下,DecorView開始依次調用自己子元素的measure。計算完成這兩
個參數後就開始layout,最後再是draw的調用。對於ListView,當然每一個Item都會被調用Measure方法,而在這個過程中
getView和getCount會被調用,而且看用戶的需求,可能會有很多次調用。問題就在於在layout中的決定ListView或者它的父元素的
height和width屬性的定義了。 根據我的經驗,height和width最好都設置成fill_parent,這樣能避免listview對getView的瘋狂調用。 解決方法就是盡量避免自適應,除非是萬不得已,固定大小或者填充的效果會比較好一些。 還有一點請注意,如果使用了上面的動態測量來設置listview的顯示高度,並使用了fill_parent來設置了listview的屬性,但是仍然不能停止adapter中getView()方法的瘋狂調用;或者還伴有listview內容顯示仍然不完全現象; 根據我自己的實踐經驗來講,你可以這樣做: 把listview放置在LinearLayout中,<LinearLayout中只存在一個listview>; 我推斷是,當你通過動態測量載入的時候,ta需要一個獨立的空間。
Ⅱ Android 解決viewPager中嵌套webView的滑動沖突
在工作中遇到了一種情況,在可以橫向滑動的viewPager其中的一項中嵌套著一個webView,並且在這個webView中也有可以橫向滑動的的類似viewPager的組件,因為webView其中的H5組件我們是無法控制的,因此便會發生滑動沖突,現象則是webView中的H5組件無法滑動。比如下圖
經過筆者的一陣搜索,借鑒了 Viewpager與webview滑動沖突的解決方案 一文的解決方案,並在其基礎上改進了一下,使之處理起來更加簡單一些。
首先我們先確定滑動沖突是事件分發機制的事情。解決辦法需要在需要的地方進行事件的攔截和分發可以使用下面的方法
當為true的時候則說明父控制項(也就是viewPager)不攔截事件,點擊事件由子控制項(也就是webView)來處理,反之為false的時候,父控制項則攔截點擊事件,子控制項無法響應點擊事件。
此時我們需要Android原生和JS交互一下,來通知我們什麼時候攔截事件,什麼時候不攔截事件。首先我們要先和H5的小夥伴商量好方法名和參數,在H5中可以監聽到是否點擊了或者滑動了輪播圖,H5的小夥伴可以在監聽值判斷,如果點擊或者滑動了H5中的輪播圖則,調用Android原生的方法參數為true,Android端則進行事件的攔截,反之沒有點擊或者滑動的時候,則調用方法參數為false。
交互方法:
如果有不懂Android原生與H5交互方法的可以看我的一篇文章 <Android中webveiw與H5進行交互>
此時我們拿到參數以後就可以進行事件的攔截
這樣就可以對事件分發進行處理,不過此處需要注意的是攔截事件的方法 wb.(isIntercept);必須要寫在Touch事件中才可以生效,寫在webview初始化的地方是不可以的。
ok,筆者認為這種方法比H5端去測量輪播圖的位置,然後告訴Android端,Android端再去判斷位置去攔截事件要簡單一些。當然這只是個人想法,還是要感謝借鑒文章的大佬,畢竟是站在了巨人的肩膀上。