android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。
我們直接入主題。所有問題例子請(qǐng)參照下圖
?
?
1,怎樣使圖片具有點(diǎn)擊事件?
答:
? ? ?解決方法:
? ? ?在你的BaseAdapter里面不要設(shè)置下面這三個(gè)東西,然后再設(shè)置GridView的onItemClick。
? ? ?gridView.setClickable(false);
? ? ? gridView.setPressed(false);
? ? ??gridView.setEnabled(false);
?
?
2,為什么我在已經(jīng)處理了listView點(diǎn)擊事件阻斷的情況下,同時(shí)圖片具有點(diǎn)擊事件,此時(shí)再點(diǎn)擊和圖片同高度的空白處,卻無法執(zhí)行l(wèi)istView的item點(diǎn)擊事件,點(diǎn)擊其它非同高度地方,例如點(diǎn)擊文字卻可以。
答:
? ? 原因:
? ? GridView 格子中的View 有點(diǎn)擊事件,證明你沒阻斷,之所以點(diǎn)擊和圖片同高度的空白處沒有執(zhí)行?listView 的點(diǎn)擊事件是你的GridView 霸占了整行,即使你的格子只有一個(gè),驗(yàn)證我這句話就是給GridView 設(shè)置個(gè)背景,若非如此請(qǐng)留言,我?guī)湍?fix。
? ? 解決方法:
? ? 動(dòng)態(tài)給你的 GridView 設(shè)置寬度,不要使用 Wrap_Parent 等.
?
3,如何動(dòng)態(tài)地給嵌套在Listview 里面的 GridView 設(shè)置寬、高度?
答:
? ?解決方法:
? ?GridView 沒有setWidth() 等操作,你必須使用 setLayoutParams() 來搞定。
?
4,為什么我給 GridView 設(shè)置了setLayoutParams() 后被拋出強(qiáng)轉(zhuǎn)類型失敗異常,程序崩潰?
答:
? ? 原因/解決方法:
? ? 如果你的 GridView 是某個(gè)View 的子 View,例如你使用 LinearLayout 包裹 GridView,那么你的GridView要設(shè)置的?setLayoutParams() 所傳入的?LayoutParams 必須要是LinearLayout。即是
ViewGroup.LayoutParams linearParams =new LinearLayout.LayoutParams((70,70);
gridView.setLayoutParams(linearParams); ? ?否則拋出異常。
?
5,為什么我動(dòng)態(tài)設(shè)置了 GridView 的寬度后,發(fā)現(xiàn) 格子 有錯(cuò)位、重疊、間隙太大、很丑很沒幸福感的現(xiàn)象?
答:
? ? 原因:
? ? 寬度、間隙太大--你的 GridView 如果使用默認(rèn)的排版方式,即是如果你是沒有設(shè)置?gridView.setStretchMode(GridView.NO_STRETCH);?的話,那么它就是把寬度平均分來顯示每個(gè)格子的,這樣會(huì)造成。解決方法是設(shè)置GridView.NO_STRETCH,然后是自定義格子寬度和間隙。或者設(shè)置好 GridView的寬度。
? ? 重疊、遮擋的現(xiàn)象--如果你設(shè)置了GridView.NO_STRETCH,那么就可能會(huì)出現(xiàn)重疊、遮擋的現(xiàn)象,解決方法是動(dòng)態(tài)測(cè)量設(shè)備寬度再使用等比例來設(shè)置理想格子寬度,既不影響格子的點(diǎn)擊,又能相應(yīng) ListView 的Item 點(diǎn)擊,例如:
? ? int myWidth =?80; // 這個(gè)值是你的顯示圖片的寬度,例如我的ImageView,我設(shè)置了它寬為80dp,那么就是80
? ? int distance = 3;//這個(gè)是每個(gè)格子之間的 間隙
? ? int userPhoneWidth = 設(shè)備的寬度; // 自己使用代碼獲取
? ? int myPhoneWith =?1080 ; // 這個(gè)是你測(cè)試的設(shè)備的寬度,我的是1080
? ? 公式計(jì)算,先聲明下,上面4個(gè)值一旦確定了就適用于所有設(shè)備,因?yàn)椴捎玫氖堑缺瓤s放,也測(cè)試過。
? ? (其他手機(jī)的理想格子寬度)/userPhoneWidth =?myWidth/myPhoneWith,簡單化簡后:
? ? 理想格子寬度 =?userPhoneWidth *?myWidth /?myPhoneWith?
? ??gridView.setHorizontalSpacing((userPhoneWidth+3) * 最大格子數(shù) *?myWidth /?myPhoneWith); //采用GridView.NO_STRETCH?后設(shè)置間距
?
?
6,為什么我 點(diǎn)擊文字下面的部分 無法執(zhí)行 listView 的 item 點(diǎn)擊事件?
答:典型的事件阻斷,針對(duì)這種的解決方法,百度上面大把解決方法。我這里不羅嗦。
?
最終,我項(xiàng)目的 ListView 嵌套 GridView 后的效果是滿足上述所有想要的效果。
總結(jié)
以上是生活随笔為你收集整理的android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker 核心概念整理
- 下一篇: bond 配置