本文共 79774 字,大约阅读时间需要 265 分钟。
之前忙着做项目,好久之前的技术都没有时间总结,而发现自己的博客好多写的技术都比自己掌握的时候晚了很多。不管怎么样,写技术博客一定是一个想成为优秀程序猿或者已经是优秀程序猿必须做的。好吧,下面进行学习阶段。
记得很久之前就使用过侧边拼音栏了,先看下它的效果,一个列表,列表的右侧有一个拼音列表,当列表发生滑动的时候,拼音列表也随着滑动,而规律就是拼音列表滑动的位置为显示列表的当前位置的文字的首字母决定,当然,直接点击拼音列表的一个位置,显示列表也会直接滑动到对应拼音开头的文字所在位置。
下面看一个使用的示例,这里我们使用本地的XML城市数据文件 来给列表显示数据,只是为了给自己练习SAX解析XML文件。可能大家看起来有点复杂,大家可以用一个简单的List数据测试即可,
而我的这个注意xml文件要放在assets文件夹下
1 23 4 24- 东城区
5- 西城区
6- 崇文区
7- 宣武区
8- 朝阳区
9- 丰台区
10- 石景山区
11- 海淀区
12- 门头沟区
13- 房山区
14- 通州区
15- 顺义区
16- 昌平区
17- 大兴区
18- 怀柔区
19- 平谷区
20- 密云县
21- 延庆县
22- 北京周边
2325 45- 黄浦区
26- 卢湾区
27- 徐汇区
28- 长宁区
29- 静安区
30- 普陀区
31- 闸北区
32- 虹口区
33- 杨浦区
34- 闵行区
35- 宝山区
36- 嘉定区
37- 浦东区
38- 金山区
39- 松江区
40- 奉贤区
41- 崇明区
42- 南汇区
43- 青浦区
4446 58- 荔湾区
47- 越秀区
48- 海珠区
49- 天河区
50- 白云区
51- 黄埔区
52- 番禺区
53- 花都区
54- 南沙区
55- 萝岗区
56- 增城
5759 76- 和平区
60- 河东区
61- 河西区
62- 南开区
63- 河北区
64- 红桥区
65- 滨海新区
66- 东丽区
67- 西青区
68- 津南区
69- 北辰区
70- 武清区
71- 宝坻区
72- 宁河县
73- 静海县
74- 蓟县
7577 89- 石家庄市
78- 唐山市
79- 秦皇岛市
80- 邯郸市
81- 邢台市
82- 保定市
83- 张家口市
84- 承德市市
85- 沧州市
86- 廊坊市
87- 衡水市
8890 102- 太原市
91- 大同市
92- 阳泉市
93- 长治市
94- 晋城市
95- 朔州市
96- 晋中市
97- 运城市
98- 忻州市
99- 临汾市
100- 吕梁市
101103 116- 呼和浩特市
104- 包头市
105- 乌海市
106- 赤峰市
107- 通辽市
108- 鄂尔多斯市
109- 呼伦贝尔市
110- 巴彦淖尔市
111- 乌兰察布市
112- 兴安盟
113- 锡林郭勒盟
114- 阿拉善盟
115117 132- 沈阳市
118- 大连市
119- 鞍山市
120- 抚顺市
121- 本溪市
122- 丹东市
123- 锦州市
124- 营口市
125- 阜新市
126- 辽阳市
127- 盘锦市
128- 铁岭市
129- 朝阳市
130- 葫芦岛市
131133 143- 长春市
134- 吉林市
135- 四平市
136- 辽源市
137- 通化市
138- 白山市
139- 松原市
140- 白城市
141- 延边朝鲜自治州
142144 158- 哈尔滨市
145- 齐齐哈尔市
146- 鸡西市
147- 鹤岗市
148- 双鸭山市
149- 大庆市
150- 伊春市
151- 佳木斯市
152- 七台河市
153- 牡丹江市
154- 黑河市
155- 绥化市
156- 大兴安岭地区
157159 173- 南京市
160- 无锡市
161- 徐州市
162- 常州市
163- 苏州市
164- 南通市
165- 连云港市
166- 淮安市
167- 盐城市
168- 扬州市
169- 镇江市
170- 泰州市
171- 宿迁市
172174 186- 杭州市
175- 宁波市
176- 温州市
177- 嘉兴市
178- 湖州市
179- 绍兴市
180- 金华市
181- 衡州市
182- 舟山市
183- 台州市
184- 丽水市
185187 204- 合肥市
188- 芜湖市
189- 蚌阜市
190- 淮南市
191- 马鞍山市
192- 淮北市
193- 铜陵市
194- 安庆市
195- 黄山市
196- 滁州市
197- 阜阳市
198- 宿州市
199- 六安市
200- 毫州市
201- 池州市
202- 宣城市
203205 215- 福州市
206- 厦门市
207- 莆田市
208- 三明市
209- 泉州市
210- 漳州市
211- 南平市
212- 龙岩市
213- 宁德市
214216 228- 南昌市
217- 景德镇市
218- 萍乡市
219- 九江市
220- 新余市
221- 鹰潭市
222- 赣州市
223- 吉安市
224- 宜春市
225- 抚州市
226- 上饶市
227229 247- 济南市
230- 青岛市
231- 淄博市
232- 枣庄市
233- 东营市
234- 烟台市
235- 潍坊市
236- 济宁市
237- 泰安市
238- 威海市
239- 日照市
240- 莱芜市
241- 临沂市
242- 德州市
243- 聊城市
244- 滨州市
245- 菏泽市
246248 266- 郑州市
249- 开封市
250- 洛阳市
251- 平顶山市
252- 安阳市
253- 鹤壁市
254- 新乡市
255- 焦作市
256- 许昌市
257- 漯河市
258- 三门峡市
259- 南阳市
260- 商丘市
261- 信阳市
262- 周口市
263- 驻马店市
264- 济源市
265267 283- 武汉市
268- 黄石市
269- 十堰市
270- 宜昌市
271- 襄阳市
272- 鄂州市
273- 荆门市
274- 黄冈市
275- 咸宁市
276- 随州市
277- 恩师土家族苗族自治州
278- 仙桃市
279- 潜江市
280- 天门市
281- 神农架林市
282284 299- 长沙市
285- 株洲市
286- 湘潭市
287- 衡阳市
288- 邵阳市
289- 岳阳市
290- 常德市
291- 张家界市
292- 益阳市
293- 彬州市
294- 永州
295- 怀化市
296- 娄底市
297- 湘西土家族自治州
298300 320- 广州市
301- 韶关市
302- 深圳市
303- 珠海市
304- 汕头市
305- 佛山市
306- 江门市
307- 茂名市
308- 惠州市
309- 梅州市
310- 汕尾市
311- 河源市
312- 阳江市
313- 清远市
314- 东莞市
315- 中山市
316- 潮州市
317- 揭阳市
318- 云浮市
319321 336- 南宁市
322- 柳州市
323- 桂林市
324- 梧州市
325- 北海市
326- 防城港市
327- 钦州市
328- 贵港市
329- 玉林市
330- 百色市
331- 贺州市
332- 河池市
333- 来宾市
334- 崇左市
335337 340- 海口市
338- 三亚市
339341 357- 万州区
342- 渝中区
343- 大渡口区
344- 江北区
345- 沙坪坝区
346- 九龙坡区
347- 南岸区
348- 渝北区
349- 巴南区
350- 长寿区
351- 江津区
352- 合川区
353- 永川区
354- 南川区
355- 大足区
356358 377- 成都市
359- 自贡市
360- 攀枝花市
361- 泸州市
362- 德阳市
363- 锦阳市
364- 广元市
365- 遂宁市
366- 内江市
367- 乐山市
368- 南充市
369- 眉山市
370- 宜宾市
371- 广安市
372- 达州市
373- 雅安市
374- 巴中市
375- 资阳市
376378 385- 贵阳市
379- 六盘水市
380- 遵义市
381- 安抚市
382- 铜仁市
383- 毕节市
384386 395- 昆明市
387- 曲靖市
388- 玉溪市
389- 保山市
390- 昭通市
391- 丽江市
392- 普洱市
393- 临沧市
394396 398- 拉萨市
397399 410- 西安市
400- 铜川市
401- 宝鸡市
402- 咸阳市
403- 渭南市
404- 延安市
405- 汉中市
406- 榆林市
407- 安康市
408- 商洛市
409411 424- 兰州市
412- 嘉峪关市
413- 金昌市
414- 白银市
415- 天水市
416- 武威市
417- 张掖市
418- 平凉市
419- 酒泉市
420- 庆阳市
421- 定西市
422- 陇南市
423425 427- 西宁市
426428 434- 银川市
429- 石嘴山市
430- 吴忠市
431- 固原市
432- 中卫市
433435 438- 乌鲁木齐市
436- 克拉玛依市
437439 447- 台北市
440- 高雄市
441- 基隆市
442- 台中市
443- 台南市
444- 新竹市
445- 嘉义市
446448 452- 香港岛
449- 九龙
450- 新界
451453 456- 澳门半岛
454- 澳门离岛
455457 533- 国贸
458- CBD
459- 大望路
460- 四惠
461- 双井
462- 劲松
463- 潘家园
464- 广渠门
465- 建外大街
466- 东大桥
467- 工体
468- 朝外大街
469- 京广桥
470- 团结湖
471- 朝阳公园
472- 呼家楼
473- 三里屯
474- 麦子店
475- 燕莎
476- 三元桥
477- 国展
478- 西坝河
479- 柳芳
480- 和平街
481- 左家庄
482- 太阳宫
483- 芍药居
484- 安贞
485- 亚运村
486- 安慧桥
487- 小关
488- 北沙滩
489- 奥运村
490- 大屯
491- 小营
492- 望京
493- 来广营
494- 媒体村
495- 花家地
496- 北苑
497- 大山子
498- 酒仙桥
499- 甘露园
500- 首都机场
501- 东坝
502- 姚家园
503- 水碓子
504- 甜水园
505- 朝青板块
506- 石佛营
507- 十里堡
508- 红庙
509- 百子湾
510- 高碑店
511- 双桥
512- 定福庄
513- 常营
514- 慈云寺
515- 管庄
516- 南磨房
517- 垡头
518- 豆各庄
519- 十八里店
520- 小红门
521- 十里河
522- 惠新西街
523- 将台路
524- 八里庄
525- 欢乐谷
526- 惠新里
527- 朝阳周边
528- 健翔桥
529- 孙河
530- 松榆里
531- 华威桥
532534 592- 中关村
535- 北京大学
536- 清华大学
537- 五道口
538- 上地
539- 西三旗
540- 西二旗
541- 清河
542- 二里庄
543- 学院路
544- 知春路
545- 牡丹园
546- 北航
547- 北太平庄
548- 蓟门桥
549- 双榆树
550- 人民大学
551- 皂君庙
552- 大钟寺
553- 魏公村
554- 白石桥
555- 交通大学
556- 紫竹桥
557- 花园桥
558- 北洼路
559- 航天桥
560- 甘家口
561- 军博
562- 公主坟
563- 厂洼
564- 万寿路
565- 五棵松
566- 永定路
567- 西八里庄
568- 定慧寺
569- 田村
570- 四季青
571- 香山
572- 世纪城
573- 苏州桥
574- 苏州街
575- 万泉河
576- 万柳
577- 增光路
578- 西苑
579- 马连洼
580- 西北旺
581- 车道沟
582- 西山
583- 万寿寺
584- 明光桥
585- 安宁庄
586- 海淀周边
587- 联想桥
588- 金沟河
589- 恩济里
590- 五路居
591593 613- 东直门
594- 东直门外
595- 和平里
596- 雍和宫
597- 安定门
598- 交道口
599- 东四十条
600- 海运仓
601- 北新桥
602- 朝阳门
603- 建国门
604- 北京站
605- 王府井
606- 景山
607- 灯市口
608- 沙滩
609- 东单
610- 东四
611- 东城周边
612614 641- 西直门
615- 车公庄
616- 官园
617- 百万庄
618- 阜成门
619- 西四
620- 展览路
621- 月坛
622- 金融街
623- 西单
624- 德胜门
625- 六铺炕
626- 积水潭
627- 小西天
628- 新街口
629- 马甸
630- 鼓楼
631- 地安门
632- 复兴门
633- 西便门
634- 南礼士路
635- 什刹海
636- 木樨地
637- 三里河
638- 西城周边
639- 真武庙
640642 656- 崇文门
643- 前门
644- 新世界
645- 广渠门
646- 东花市
647- 法华寺
648- 体育馆路
649- 磁器口
650- 天坛
651- 永定门
652- 龙潭湖
653- 光明楼
654- 崇文周边
655657 679- 广安门外
658- 广安门内
659- 天宁寺
660- 马连道
661- 红莲
662- 白纸坊
663- 南菜园
664- 大观园
665- 白广路
666- 牛街
667- 长椿街
668- 宣武门
669- 椿树街道
670- 菜市口
671- 陶然亭
672- 珠市口
673- 虎坊桥
674- 天桥
675- 大栅栏
676- 和平门
677- 宣武周边
678680 725- 西客站
681- 太平桥
682- 六里桥
683- 丰台路
684- 青塔
685- 岳各庄
686- 卢沟桥
687- 长辛店
688- 云岗
689- 北大地
690- 丰台体育馆
691- 丽泽桥
692- 科技园区
693- 世界公园
694- 花乡
695- 玉泉营
696- 菜户营
697- 西罗园
698- 右安门
699- 草桥
700- 洋桥
701- 木樨园
702- 新发地
703- 赵公口
704- 嘉园
705- 刘家窑
706- 蒲黄榆
707- 左安门
708- 方庄
709- 东铁匠营
710- 丰益桥
711- 看丹桥
712- 成寿寺
713- 宋家庄
714- 大红门
715- 七里庄
716- 马家堡
717- 五里店
718- 角门
719- 南苑
720- 东高地
721- 和义
722- 莲花池
723- 丰台周边
724726 752- 北关
727- 北关环岛
728- 永顺
729- 新华大街
730- 通州北苑
731- 八里桥
732- 果园
733- 九棵树
734- 梨园
735- 土桥
736- 临河里
737- 中仓
738- 西门
739- 乔庄
740- 东关
741- 运河大街
742- 玉桥
743- 张家湾
744- 八通轻轨沿线
745- 武夷花园
746- 潞城
747- 马驹桥
748- 漷县
749- 次渠
750- 通州周边
751753 771- 八宝山
754- 玉泉路
755- 鲁谷
756- 永乐
757- 衙门口
758- 八角
759- 老山
760- 杨庄
761- 古城
762- 苹果园
763- 金顶街
764- 模式口
765- 五里坨
766- 西山
767- 八大处
768- 石景山周边
769- 广宁
770772 784- 长阳
773- 良乡
774- 阎村
775- 迎风
776- 窦店
777- 房山城关
778- 琉璃河
779- 韩村河
780- 燕山
781- 周口店
782- 房山周边
783785 803- 天通苑
786- 立水桥
787- 东小口
788- 霍营
789- 小汤山
790- 北七家
791- 回龙观
792- 龙泽
793- 城北
794- 沙河
795- 百善
796- 阳坊
797- 南口
798- 城南
799- 昌平县城
800- 昌平周边
801- 南邵镇
802804 822- 亦庄
805- 旧宫
806- 郁花园
807- 同兴园
808- 西红门
809- 兴华大街
810- 清源
811- 兴丰大街
812- 海子角
813- 黄村
814- 兴业大街
815- 观音寺
816- 滨河
817- 林校路
818- 新宫
819- 庞各庄
820- 大兴周边
821823 840- 胜利
824- 石园
825- 天竺
826- 新国展
827- 机场
828- 南彩
829- 马坡
830- 后沙峪
831- 李桥
832- 光明
833- 裕龙
834- 建新
835- 杨镇
836- 顺义城区
837- 中央别墅区
838- 顺义周边
839841 846- 密云城区
842- 不老屯
843- 溪翁庄
844- 密云周边
845847 854- 雁栖
848- 桥梓
849- 怀柔城区
850- 渤海镇
851- 庙城
852- 怀柔周边
853855 860- 延庆城区
856- 大榆树
857- 八达岭
858- 延庆周边
859861 869- 金海湖
862- 滨河路
863- 平谷城区
864- 兴谷
865- 渔阳
866- 王辛庄
867- 平谷周边
868870 879- 大峪
871- 东辛房
872- 龙泉
873- 城子街道
874- 永定
875- 潭柘寺
876- 军庄
877- 门头沟周边
878880 885- 香河
881- 燕郊
882- 三河
883- 固安
884886 931- 员村
887- 东圃
888- 车陂
889- 黄村
890- 棠下
891- 上社
892- 华景新城
893- 天河公园
894- 石牌
895- 岗顶
896- 龙口西
897- 龙口东
898- 五山
899- 天河北
900- 林和
901- 体育中心
902- 体育西路
903- 天河南
904- 天河东路
905- 黄埔大道西
906- 猎德
907- 冼村
908- 珠江新城
909- 广州大道中
910- 沙河
911- 天平架
912- 粤垦
913- 沙太南
914- 天河客运站
915- 元岗
916- 长兴
917- 长湴
918- 植物园
919- 龙洞
920- 新塘
921- 珠吉
922- 中山大道
923- 前进
924- 员村二横路
925- 兴华
926- 沙东
927- 天园
928- 登峰
929- 凤凰
930932 971- 赤岗
933- 客村
934- 广州大道南
935- 新港
936- 新港西
937- 中大
938- 下渡路
939- 怡乐路
940- 琶洲
941- 东晓南
942- 晓港
943- 昌岗
944- 江南大道南
945- 江南西
946- 江南中
947- 江南大道中
948- 前进路
949- 素社
950- 滨江东
951- 滨江
952- 宝岗
953- 南华西
954- 工业大道北
955- 沙园
956- 工业大道
957- 南石头
958- 江燕路
959- 海幢
960- 工业大道南
961- 南洲
962- 沥滘
963- 官洲
964- 华洲
965- 工业大道中
966- 瑞宝
967- 凤阳
968- 龙凤
969- 江海
970972 1010- 小北
973- 环市东
974- 建设
975- 淘金
976- 黄花岗
977- 水荫路
978- 东风东
979- 梅花村
980- 杨箕村
981- 五羊新城
982- 东山口
983- 农林下路
984- 中山路
985- 东川
986- 农讲所
987- 广卫
988- 北京路
989- 解放南
990- 解放北
991- 流花
992- 东风路
993- 盘福路
994- 六榕
995- 西门口
996- 大新
997- 人民
998- 嘉禾
999- 白云
1000- 大沙头
1001- 东湖
1002- 二沙岛
1003- 光塔
1004- 环市中
1005- 大东
1006- 华乐
1007- 诗书
1008- 洪桥
10091011 1051- 三元里
1012- 新市
1013- 黄石
1014- 机场路
1015- 同和
1016- 京溪
1017- 梅花园
1018- 广州大道北
1019- 广园路
1020- 棠景
1021- 同德围
1022- 西槎路
1023- 罗冲围
1024- 金沙洲
1025- 石井
1026- 景泰
1027- 白云大道南
1028- 白云大道北
1029- 黄边
1030- 嘉禾望岗
1031- 桂花岗
1032- 伍仙桥
1033- 沙太北
1034- 龙归
1035- 人和
1036- 南湖
1037- 永平
1038- 太和
1039- 广花
1040- 均禾
1041- 江高
1042- 钟落潭
1043- 竹料
1044- 良田
1045- 九佛
1046- 神山
1047- 矿泉
1048- 松洲
1049- 鹤边
10501052 1089- 芳村
1053- 站前
1054- 西村
1055- 环市西
1056- 南岸路
1057- 中山八路
1058- 西关
1059- 周门
1060- 荔湾路
1061- 陈家祠
1062- 东风西
1063- 西华路
1064- 光复北路
1065- 康王路
1066- 龙津
1067- 上下九
1068- 沙面
1069- 黄沙
1070- 花地湾
1071- 坑口
1072- 白鹤洞
1073- 龙溪
1074- 桥东
1075- 窖口
1076- 桥中
1077- 昌华
1078- 黄岐
1079- 华林
1080- 岭南
1081- 逢源
1082- 多宝
1083- 金花
1084- 南源
1085- 彩虹
1086- 第一津街
1087- 白鹅潭
10881090 1114- 市桥
1091- 祈福
1092- 钟村
1093- 大石
1094- 桥南
1095- 洛溪
1096- 南浦
1097- 华南
1098- 石碁
1099- 石楼
1100- 东涌
1101- 鱼窝头
1102- 大岗
1103- 榄核
1104- 沙头
1105- 东环
1106- 灵山
1107- 黄阁
1108- 横沥
1109- 万顷沙
1110- 顺德碧桂园
1111- 亚运城
1112- 大学城
11131115 1126- 黄埔
1116- 黄埔区府
1117- 大沙
1118- 文冲
1119- 鱼珠
1120- 南岗
1121- 红山
1122- 穗东
1123- 长洲
1124- 荔联
11251127 1142- 新华
1128- 狮岭
1129- 新区
1130- 旧区
1131- 花城路
1132- 花东
1133- 雅瑶
1134- 花山
1135- 芙蓉
1136- 炭步
1137- 赤坭
1138- 北兴
1139- 梯面
1140- 花侨
11411143 1148- 开发东区
1144- 开发西区
1145- 科学城
1146- 萝岗镇
11471149 1159- 龙穴街道
1150- 南沙街道
1151- 珠江街道
1152- 万顷沙镇
1153- 黄阁镇
1154- 横沥镇
1155- 榄核镇
1156- 大岗镇
1157- 东涌镇
11581160 1189- 荔城
1161- 荔城
1162- 新塘
1163- 广园东
1164- 永和
1165- 三江
1166- 朱村
1167- 仙村
1168- 沙庄
1169- 中新
1170- 小楼
1171- 正果
1172- 镇龙
1173- 福和
1174- 派潭
1175- 新塘
1176- 广园东
1177- 永和
1178- 三江
1179- 朱村
1180- 仙村
1181- 沙庄
1182- 中新
1183- 小楼
1184- 正果
1185- 镇龙
1186- 福和
1187- 派潭
11881190 1203- 北新泾
1191- 地铁中山公园
1192- 古北
1193- 虹桥路
1194- 江苏路地铁
1195- 上海影城
1196- 天山路
1197- 西郊公园
1198- 仙霞
1199- 新华路
1200- 镇宁路
1201- 周家桥
12021204 1218- 半淞园路
1205- 董家渡
1206- 黄浦周边
1207- 老西门
1208- 南京东路
1209- 南浦大桥
1210- 南外滩
1211- 蓬莱公园
1212- 人民广场
1213- 外滩/十六铺
1214- 西藏南路
1215- 斜桥
1216- 豫园
12171219 1246- 漕宝路地铁口
1220- 漕河泾
1221- 长桥
1222- 枫林路
1223- 复兴中路
1224- 衡山路
1225- 华东理工
1226- 淮海西路
1227- 华泾
1228- 湖南路
1229- 康建
1230- 凌云路
1231- 龙华
1232- 日晖新村
1233- 上海交大
1234- 上海南站
1235- 上海师大
1236- 上海图书馆
1237- 上海植物园
1238- 田林
1239- 万体馆
1240- 襄阳公园
1241- 斜土路
1242- 徐汇周边
1243- 徐家汇
1244- 肇嘉浜路
12451247 1258- 北京西路
1248- 曹家渡
1249- 江宁路
1250- 静安寺
1251- 静安周边
1252- 南京西路
1253- 上海电视台
1254- 西康路
1255- 新闸路
1256- 玉佛寺
12571259 1279- 曹杨
1260- 长风公园
1261- 长寿路
1262- 长征
1263- 甘泉路
1264- 光新
1265- 华东师大
1266- 建德花园
1267- 金沙江路
1268- 李子园
1269- 普陀周边
1270- 轻纺市场
1271- 桃浦
1272- 万里城
1273- 武宁路
1274- 宜川路
1275- 真光
1276- 真如
1277- 中远两湾城
12781280 1296- 宝山路
1281- 场中路
1282- 大宁路
1283- 共和新路
1284- 和田地区
1285- 老北站
1286- 彭浦
1287- 天目西路
1288- 汶水路
1289- 西藏北路
1290- 新客站
1291- 延长路
1292- 闸北公园
1293- 闸北周边
1294- 芷江西路
12951297 1313- 北外滩
1298- 大柏树
1299- 海宁路
1300- 和平公园
1301- 虹口周边
1302- 虹口足球场
1303- 江湾
1304- 凉城
1305- 临平路
1306- 鲁迅公园
1307- 曲阳路
1308- 四川北路
1309- 四平路
1310- 提篮桥
1311- 周家嘴路
13121314 1332- 鞍山
1315- 长白新村
1316- 长阳路
1317- 东外滩
1318- 黄兴
1319- 江浦路
1320- 控江路
1321- 平凉路
1322- 五角场
1323- 新华医院
1324- 新江湾城
1325- 杨浦大桥
1326- 杨浦公园
1327- 杨浦周边
1328- 远光旦
1329- 中原
1330- 周家嘴路
13311333 1363- 北桥区快
1334- 漕宝路
1335- 春申
1336- 东兰新村
1337- 凤溪
1338- 古美罗阳
1339- 航华
1340- 虹梅路
1341- 虹桥
1342- 华漕
1343- 江川路
1344- 静安新城
1345- 金虹桥
1346- 纪王
1347- 老闵行
1348- 龙柏金汇
1349- 马桥
1350- 梅陇
1351- 闵行周边
1352- 南方商城
1353- 浦江
1354- 蔷薇新村
1355- 七宝
1356- 七莘路
1357- 莘庄
1358- 莘庄工业区
1359- 吴泾
1360- 颛桥
1361- 诸翟
13621364 1389- 宝山周边
1365- 大场
1366- 大华路
1367- 东城区
1368- 高境
1369- 共富新村
1370- 共康
1371- 顾村
1372- 锦秋花园
1373- 刘行
1374- 罗店
1375- 罗泾
1376- 罗南
1377- 上海大学
1378- 水产路
1379- 泗塘
1380- 淞宝
1381- 淞南
1382- 通河西城
1383- 通河新村
1384- 杨行
1385- 友谊路
1386- 月浦
1387- 张庙
13881390 1411- 安亭
1391- 曹王
1392- 封浜
1393- 丰庄
1394- 黄渡
1395- 华亭
1396- 嘉定城区
1397- 嘉定新村
1398- 嘉定周边
1399- 江桥新城
1400- 金鹤新城
1401- 菊园新区
1402- 娄塘
1403- 马陆
1404- 南翔
1405- 唐行
1406- 外冈
1407- 徐行
1408- 真新
1409- 朱桥
14101412 1451- 八佰伴
1413- 北蔡
1414- 碧云
1415- 曹路
1416- 昌里
1417- 川沙
1418- 东昌站地铁站
1419- 东方路地铁
1420- 东明路
1421- 高桥
1422- 高行
1423- 合庆
1424- 花木
1425- 金桥
1426- 金杨新村
1427- 联洋
1428- 临港新城
1429- 六里
1430- 龙阳路地铁站
1431- 陆家嘴
1432- 梅园
1433- 南码头
1434- 浦东周边
1435- 三林
1436- 上钢新村
1437- 上南
1438- 世博滨江
1439- 世纪公园
1440- 塘桥
1441- 唐镇
1442- 外高桥
1443- 潍坊新村
1444- 杨东
1445- 洋泾
1446- 御桥
1447- 张江
1448- 周家渡
1449- 竹园商贸区
14501452 1460- 枫泾
1453- 朱泾
1454- 亭林
1455- 漕泾
1456- 金山新城
1457- 金山周边
1458- 金山中部
14591461 1488- 车墩
1462- 大港
1463- 洞泾
1464- 方松
1465- 九亭
1466- 练塘
1467- 泖港
1468- 茸北
1469- 莘闵
1470- 佘山
1471- 石湖荡
1472- 泗泾
1473- 松江大学城
1474- 松江工业区
1475- 松江科技园
1476- 松江老城
1477- 松江新城
1478- 松江周边
1479- 塔汇
1480- 小昆山
1481- 新浜
1482- 新桥
1483- 叶榭
1484- 永丰
1485- 岳阳
1486- 中山
14871489 1504- 白鹤
1490- 华新镇
1491- 金泽
1492- 青浦北部
1493- 青浦工业园区
1494- 青浦新城
1495- 青浦周边
1496- 香花桥
1497- 夏阳街道
1498- 徐泾
1499- 赵屯
1500- 赵巷
1501- 重固
1502- 朱家角
15031505 1515- 金汇
1506- 南桥
1507- 庄行
1508- 奉城
1509- 柘林
1510- 海湾
1511- 海湾旅游区
1512- 奉贤周边
1513- 西渡
15141516 1522- 城桥
1517- 堡镇
1518- 陈家
1519- 长兴岛
1520- 崇明周边
15211523 1534- 打浦桥
1524- 复兴公园
1525- 淮海公园
1526- 淮海中路
1527- 鲁班路
1528- 瑞金二路
1529- 世博滨江
1530- 五里桥
1531- 新天地
1532- 中山南一路
15331535 1545- 南汇周边
1536- 芦潮港
1537- 泥城
1538- 航头
1539- 新场
1540- 惠南
1541- 祝桥
1542- 周浦
1543- 康桥
1544
一、写布局文件:
看上面效果图可以看出,省市名是一种布局,拼音标签是一种布局。那么就需要先写两种布局
1、拼音标签布局
1 212 13 22 23
2、省市名布局
1 212 13 22 23
3、主布局文件
16 7 8 9 29 3013 14 19 20 28 42 43 44
二、现在写java代码了
1、首先看我们主要使用的一个自定义View,用来显示拼音列表,大家可以看看源码,将内容显示为自己喜欢的样子
1 package com.xqx.SideBarDemo; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.util.AttributeSet; 8 import android.view.MotionEvent; 9 import android.view.View; 10 import android.widget.TextView; 11 12 13 public class SideBar extends View { 14 15 public String[] characters = new String[] { "#", "A", "B", "C", "D", "E", "F", 16 "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", 17 "X", "Y", "Z" }; 18 19 private Paint paint; 20 private int textSize = 20; //拼音文字大小 21 private int defaultTextColor = //默认拼音文字的颜色 Color.parseColor("#D2D2D2"); 22 private int selectedTextColor = //选中后的拼音文字的颜色 Color.parseColor("#2DB7E1"); 23 private int touchedBgColor = //触摸时的拼音文字的颜色 Color.parseColor("#F5F5F5"); 24 private TextView text_dialog; 25 26 private OnTouchingLetterChangedListener onTouchingLetterChangedListener; 27 28 private int position = -1; 29 30 public SideBar(Context context) { 31 super(context); 32 } 33 34 public SideBar(Context context, AttributeSet attrs) { 35 super(context, attrs); 36 init(); 37 } 38 39 public SideBar(Context context, AttributeSet attrs, int defStyle) { 40 super(context, attrs, defStyle); 41 init(); 42 } 43 44 public void setTextDialog(TextView textView){ 45 this.text_dialog = textView; 46 } 47 48 private void init() { 49 paint = new Paint(); 50 paint.setAntiAlias(true); 51 } 52 53 @Override 54 protected void onDraw(Canvas canvas) { 55 super.onDraw(canvas); 56 57 int height = getHeight(); 58 int width = getWidth(); 59 int singleHeight = height / characters.length; 60 61 for (int i = 0; i < characters.length; i++) { 62 if (i == position) { 63 paint.setColor(selectedTextColor); 64 } else { 65 paint.setColor(defaultTextColor); 66 } 67 paint.setTextSize(textSize); 68 69 float xPos = width / 2 - paint.measureText(characters[i]) / 2; 70 float yPos = singleHeight * i + singleHeight; 71 canvas.drawText(characters[i], xPos, yPos, paint); 72 } 73 } 74 75 @Override 76 public boolean onTouchEvent(MotionEvent event) { 77 int action = event.getAction(); 78 float y = event.getY(); 79 position = (int) (y / (getHeight() / characters.length)); 80 if (position >= 0 && position < Constants.CITY_TYPE.length) { 81 onTouchingLetterChangedListener.onTouchingLetterChanged(position); 82 switch (action) { 83 case MotionEvent.ACTION_UP: 84 setBackgroundColor(Color.TRANSPARENT); 85 position = -1; 86 invalidate(); 87 if (text_dialog != null) { 88 text_dialog.setVisibility(View.INVISIBLE); 89 } 90 break; 91 default: 92 setBackgroundColor(touchedBgColor); 93 invalidate(); 94 text_dialog.setText(characters[position]); 95 break; 96 } 97 }else{ 98 setBackgroundColor(Color.TRANSPARENT); 99 if (text_dialog != null) {100 text_dialog.setVisibility(View.INVISIBLE);101 }102 103 }104 return true;105 }106 107 public void setOnTouchingLetterChangedListener(108 OnTouchingLetterChangedListener onTouchingLetterChangedListener) {109 this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;110 }111 112 113 public interface OnTouchingLetterChangedListener {114 public void onTouchingLetterChanged(int position);115 }116 117 }
2、创建一个city的实体类
1 package com.xqx.SideBarDemo; 2 3 4 public class City { 5 // 标记 拼音,label 6 public static final int CITY_TYPE_LABEL = 0; 7 // 标记 城市名 8 public static final int CITY_TYPE_CITY = 1; 9 10 private String cityName; //城市名11 private String cityType; //城市类型12 13 @Override14 public String toString() {15 return "City{ " +16 "cityName='" + cityName + '\'' +17 ", cityType='" + cityType + '\'' +18 '}';19 }20 21 public static int getTypeCount(){22 return 2;23 }24 25 public int getType(){26 27 if(cityType.equals("label")){28 return CITY_TYPE_LABEL;29 }else{30 return CITY_TYPE_CITY;31 }32 33 }34 35 public String getCityName() {36 return cityName;37 }38 39 public void setCityName(String cityName) {40 this.cityName = cityName;41 }42 43 public void setCityType(String cityType) {44 this.cityType = cityType;45 }46 }
3、解析本地xml省市数据文件,获得省市的实体类列表
1 package com.xqx.SideBarDemo; 2 3 4 import org.xml.sax.Attributes; 5 import org.xml.sax.SAXException; 6 import org.xml.sax.helpers.DefaultHandler; 7 8 import java.io.FileNotFoundException; 9 import java.io.IOException; 10 import java.io.InputStream; 11 import java.util.ArrayList; 12 import java.util.List; 13 import java.util.TreeMap; 14 15 import javax.xml.parsers.ParserConfigurationException; 16 import javax.xml.parsers.SAXParser; 17 import javax.xml.parsers.SAXParserFactory; 18 19 /** 20 * 解析本地xml文件 SAX解析 21 */ 22 public class ParseXml extends DefaultHandler { 23 24 private TreeMap> cities; 25 26 private List city; 27 28 // 城市列表第一层 29 private List cityList; 30 31 private String tagName; 32 33 // 城市列表第一层城市数量 34 private int cityNum = 1; 35 36 public ParseXml(InputStream in) { 37 38 SAXParserFactory factory = SAXParserFactory.newInstance(); 39 40 try { 41 42 SAXParser parser = factory.newSAXParser(); 43 44 parser.parse(in, this); 45 46 } catch (ParserConfigurationException e) { 47 e.printStackTrace(); 48 } catch (SAXException e) { 49 e.printStackTrace(); 50 } catch (FileNotFoundException e) { 51 e.printStackTrace(); 52 } catch (IOException e) { 53 e.printStackTrace(); 54 } 55 56 } 57 58 public TreeMap > getCities(){ 59 60 return cities; 61 62 } 63 64 public List getCityList(){ 65 66 return cityList; 67 68 } 69 70 @Override 71 public void startDocument() throws SAXException { 72 73 cities = new TreeMap >(new CityComparator()); 74 75 cityList = new ArrayList (); 76 77 } 78 79 @Override 80 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 81 82 tagName = qName; 83 84 if("string-array".equals(qName)){ 85 86 if (attributes != null){ 87 88 for (int i = 0; i < attributes.getLength(); i++) { 89 90 String attrName = attributes.getQName(i); 91 92 String attrValue = attributes.getValue(i); 93 94 if("name".equals(attrName)){ 95 96 city = new ArrayList (); 97 98 cities.put(attrValue, city); 99 100 if(cityNum <= Constants.CITY_NUMBER) {101 102 cityList.add(attrValue);103 104 cityNum ++;105 }106 107 }108 109 }110 111 }112 113 }114 115 }116 117 @Override118 public void characters(char[] ch, int start, int length) throws SAXException {119 120 String data = new String(ch, start, length);121 122 if("item".equals(tagName)){123 124 city.add(data);125 126 }127 128 }129 130 @Override131 public void endElement(String uri, String localName, String qName) throws SAXException {132 133 tagName = null;134 135 }136 137 @Override138 public void endDocument() throws SAXException {139 }140 141 }
4、汉字转换为拼音的类
1 package com.xqx.SideBarDemo; 2 3 import net.sourceforge.pinyin4j.PinyinHelper; 4 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 5 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; 6 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 7 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; 8 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 9 10 11 public class HanziToPinYin {12 13 /**14 * 如果字符串string是汉字,则转为拼音并返回15 * @param string16 * @return17 */18 public static char toPinYin(String string){19 HanyuPinyinOutputFormat hanyuPinyin = new HanyuPinyinOutputFormat();20 hanyuPinyin.setCaseType(HanyuPinyinCaseType.UPPERCASE);21 hanyuPinyin.setToneType(HanyuPinyinToneType.WITHOUT_TONE);22 hanyuPinyin.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);23 String[] pinyinArray=null;24 char hanzi = string.charAt(0);25 try {26 //是否在汉字范围内27 if(hanzi>=0x4e00 && hanzi<=0x9fa5){28 pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi, hanyuPinyin);29 }30 } catch (BadHanyuPinyinOutputFormatCombination e) {31 e.printStackTrace();32 }33 //将获取到的拼音返回34 return pinyinArray[0].charAt(0);35 }36 37 38 }
5、ListView的适配器
1 package com.xqx.SideBarDemo; 2 3 import android.content.Context; 4 import android.view.LayoutInflater; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.BaseAdapter; 8 import android.widget.TextView; 9 10 import java.util.List;11 12 public class CityListAdapter extends BaseAdapter {13 14 private Listcities;15 private Context context;16 public CityListAdapter(Context context, List cities) {17 this.cities = cities;18 this.context = context;19 }20 @Override21 public int getCount() {22 return cities.size();23 }24 @Override25 public int getViewTypeCount() {26 return City.getTypeCount();27 }28 @Override29 public Object getItem(int position) {30 return cities.get(position);31 }32 @Override33 public long getItemId(int position) {34 return position;35 }36 37 @Override38 public int getItemViewType(int position) {39 return cities.get(position).getType();40 }41 42 //判断是否可以点击,即判断是否是省市名拼音43 @Override44 public boolean isEnabled(int position) {45 46 if (getItemViewType(position) == City.CITY_TYPE_LABEL){47 return false;48 }49 return super.isEnabled(position);50 }51 52 @Override53 public View getView(int position, View convertView, ViewGroup parent) {54 55 // 如果是label 即拼音 就为label布局56 if(getItemViewType(position) == City.CITY_TYPE_LABEL){57 convertView = LayoutInflater.from(context).inflate(R.layout.item_city_list_label, parent, false);58 }else{59 //如果是城市,则为城市名称布局60 convertView = LayoutInflater.from(context).inflate(R.layout.item_city_list_city, parent, false);61 }62 //显示列表项文字63 TextView tv = (TextView) convertView.findViewById(R.id.tv_item_city);64 tv.setText(cities.get(position).getCityName());65 return convertView;66 }67 }
6、处理重庆问题(重庆会被分析为zhongqin ,注意,自己测试)
1 package com.xqx.SideBarDemo; 2 3 import java.text.CollationKey; 4 import java.text.Collator; 5 import java.text.RuleBasedCollator; 6 import java.util.Comparator; 7 import java.util.Locale; 8 9 10 public class CityComparator implements Comparator{11 12 private RuleBasedCollator collator;13 14 public CityComparator() {15 16 collator = (RuleBasedCollator) Collator.getInstance(Locale.CHINA);17 18 }19 20 @Override21 public int compare(String lhs, String rhs) {22 23 lhs = lhs.replace("重庆", "崇庆");24 rhs = rhs.replace("重庆", "崇庆");25 CollationKey c1 = collator.getCollationKey(lhs);26 CollationKey c2 = collator.getCollationKey(rhs);27 28 return c1.compareTo(c2);29 }30 }
7、存放一个常量的类
1 package com.xqx.SideBarDemo; 2 3 public class Constants { 4 5 6 public static final String XML_CITIES = "cityarrays.xml"; 7 8 // 根据cityarrays.xml文件确定城市列表第一层数量 9 public static final int CITY_NUMBER = 35;10 11 12 public static final String[] CITY_TYPE = new String[] { "#", "A", "B", "C", "D", "E", "F",13 "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",14 "X", "Y", "Z" };15 16 }
8、主MainActivity
1 package com.xqx.SideBarDemo; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.content.res.AssetManager; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.view.Window; 9 import android.widget.AdapterView; 10 import android.widget.ListView; 11 import android.widget.TextView; 12 13 import java.io.IOException; 14 import java.io.InputStream; 15 import java.util.ArrayList; 16 import java.util.Collections; 17 import java.util.List; 18 import java.util.TreeMap; 19 20 public class MainActivity extends Activity implements AdapterView.OnItemClickListener { 21 /** 22 * Called when the activity is first created. 23 */ 24 private TreeMap> citiesAll; 25 // 存放正规带有标志的城市集合 26 private List cityList; 27 private CityListAdapter adapter; 28 private SideBar sideBar; 29 private TextView dialog_text; 30 private ListView cityListView; 31 32 33 @Override 34 protected void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 requestWindowFeature(Window.FEATURE_NO_TITLE); 37 setContentView(R.layout.main); 38 39 cityListView = (ListView) findViewById(R.id.list_view_cities); 40 41 42 sideBar = (SideBar) findViewById(R.id.side_bar); 43 44 dialog_text = (TextView) findViewById(R.id.tv_text_dialog); 45 46 cityList = new ArrayList (); 47 48 adapter = new CityListAdapter(this, cityList); 49 50 cityListView.setAdapter(adapter); 51 52 cityListView.setOnItemClickListener(this); 53 54 initData(); 55 initSideBar(); 56 } 57 58 private void initSideBar() { 59 60 sideBar.setTextDialog(dialog_text); 61 // 设置拼音列表的滑动事件, 62 sideBar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener() { 63 @Override 64 public void onTouchingLetterChanged(int position) { 65 String city_label = Constants.CITY_TYPE[position]; 66 for (int i = 0; i < cityList.size(); i++) { 67 if (cityList.get(i).getCityName().equals(city_label)) { 68 cityListView.setSelection(i); 69 dialog_text.setVisibility(View.VISIBLE); 70 break; 71 } 72 if(i == cityList.size() -1){ 73 dialog_text.setVisibility(View.INVISIBLE); 74 } 75 } 76 } 77 }); 78 79 } 80 81 private void initData() { 82 83 //XML解析本地省市数据 84 AssetManager assets = getResources().getAssets(); 85 try { 86 InputStream open = assets.open(Constants.XML_CITIES); 87 //SAX解析 88 ParseXml parseXml = new ParseXml(open); 89 citiesAll = parseXml.getCities(); 90 91 // 存放第一层城市列表名称 92 List cities = parseXml.getCityList(); 93 94 // 对第一层城市列表排序 95 Collections.sort(cities, new CityComparator()); 96 97 // 添加第一个标签 98 String cityType = HanziToPinYin.toPinYin(cities.get(0)) + ""; 99 100 City city = new City();101 102 city.setCityName(cityType);103 104 city.setCityType("label");105 106 cityList.add(city);107 108 for (int i = 0; i < cities.size(); i++) {109 110 String string = cities.get(i);111 112 String s = null;113 if(string.contains("重庆")){114 115 s = HanziToPinYin.toPinYin("崇庆") + "";116 }else{117 118 s = HanziToPinYin.toPinYin(string) + "";119 }120 121 122 if(s.equals(cityType)){123 124 city = new City();125 city.setCityName(string);126 city.setCityType(cityType);127 128 cityList.add(city);129 130 }else{131 132 // 添加标签133 cityType = s;134 city = new City();135 city.setCityName(cityType);136 city.setCityType("label");137 138 cityList.add(city);139 140 // 添加城市141 city = new City();142 city.setCityName(string);143 city.setCityType(cityType);144 145 cityList.add(city);146 147 adapter.notifyDataSetChanged();148 149 }150 }151 } catch (IOException e) {152 e.printStackTrace();153 }154 155 }156 157 // 省市列表项点击事件158 @Override159 public void onItemClick(AdapterView parent, View view, int position, long id) {160 161 }162 163 }
最重要的一点:
pinyin4j-2.5.0.jar 这个jar包 一定要有,放在libs下 ,大家可以百度去下载这个jar包
转载地址:http://cgnnx.baihongyu.com/