ScrollView嵌套GridView,GridView顯示不全


  最近開發有個需求是以A-Z的方式區分全國城市(搜索功能),並實現字母索引的功能(有點類似微信,不過比較坑的是用的是GridView,

並且GridView上面還有幾個LinearLayout)。

 詳細說下需求:界面的最上面有個TextView,顯示“自動定位到的城市”,接着下面是當前點位到的城市;再下面是TextView(”熱門城市“),

再下是GridView顯示的熱門城市(不按字母分模塊),再下面是TextView(”所有城市“),最后就是GridView嵌套GridView顯示所有城市(以A-Z分模塊)。

(其實用ListView嵌套GridView是一樣的)

    不看文字的看圖吧:

   

 

另外說下,bar下面就是一個ScrollView。熱門城市這些都比較好實現,當GridView顯示所有城市的時候,就顯示不全了(印象中是只顯示到T,XYZ等顯示不出來)。

按照網上的方法各種重寫GridView和ScrollView,顯然還是沒有效果。重寫的代碼如下:

    @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     // TODO Auto-generated method stub
               int expandSpec = MeasureSpec.makeMeasureSpec(
               Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
               super.onMeasure(widthMeasureSpec, expandSpec);
     }

網上有說到,是GridView的item布局高度計算不正確,然后又是各種獲取item,各種計算,結果還是不行。

沒辦法,上面催得緊。只能用古老的方法(勿噴)。

用LinearLayout替換第二個GridView,然后LinearLayout里面嵌套GridView,首先把獲取到的所有城市按A-Z分開(非A-Z的算#,這個后面再說),通過

gridView.setAdapter和linearLayout.addView方式,終於實現了如圖的效果。Item的點擊事件在GridViewAdapter中添加,通過自定義接口回調點擊事件。

 

這里說一下字母索引的功能:右邊的字母控件是自定義(網上一大推)TextView,滑動或點擊后有一個回調函數,將當前點擊或滑動到的值回調,然后通過一個

TextView放大展示(不懂看微信)。在linearLayout.addView的時候,我把一個linearLayout的item(也就是gridView)對應的position存放到一個HashMap,

也就是key=字母,value=position。當滑動或點擊時,拿到的回調參數從HashMap把position取出來,再通過linearLayout.getChildAt(position).getY()獲取

到該item的Y坐標,最后通過srollView.scrollTo(0, (int)y),完美實現字母索引。

 

此外,漢字轉拼音的功能,使用的是pinyin4j-2.5.0.jar開源庫(轉換的數據有一些是不准確(例如“長沙” “changsha”,被轉換成“zhangsha”)),不過針對特殊的

數據可以特殊處理了。

 

差不多就這樣子了,先去研究下重寫GridView和ScrollView,依然還是顯示不全的問題吧.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM