有是業務需求需要我們使用ListView巢狀GridView或者ListView巢狀ListView就像下面這樣
但是由於由於兩個控制元件會產生滑動衝突,進而導致顯示不完整的情況,就行下面這樣,會造成資料顯示不完整,只顯示單排資料的情況,就想下面這樣
這是由於在測量繪製的時候造成的,知道原因解決起來就很簡單了,第一種解決方案,自定義GridView或者ListView ,重寫onMeasure()方法
1 2 3 4 5 6 |
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } |
兩三行程式碼這個bug直接帶走
第二種解決方案也比較簡單,既然顯示不全,我們就把GridView動態設定一下寬高,獲取到圖片的個數之後,計算出當前有幾行,計算出GridView所需要的行高,重新設定即可,這裡給大家貼一個簡單計算行高的程式碼
1 2 |
// 這裡假設我們每行顯示三個條目,imgs.size為item個數,imgs.height為每行的高度 int height = (imgs.size()+2)/3*imgs.height; |
可能會有些小夥伴對加2再除3會有點不理解,自己拿到草稿本算一算就明白了
第一種方法比較簡單,但是需要修改GridView原始碼,第二種稍微麻煩一點,但是不用修改原始碼。兩者都可以,使用那種看你自己習慣
原始碼地址