博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android项目实战(八):列表右侧边栏拼音展示效果
阅读量:5866 次
发布时间:2019-06-19

本文共 79774 字,大约阅读时间需要 265 分钟。

之前忙着做项目,好久之前的技术都没有时间总结,而发现自己的博客好多写的技术都比自己掌握的时候晚了很多。不管怎么样,写技术博客一定是一个想成为优秀程序猿或者已经是优秀程序猿必须做的。好吧,下面进行学习阶段。

记得很久之前就使用过侧边拼音栏了,先看下它的效果,一个列表,列表的右侧有一个拼音列表,当列表发生滑动的时候,拼音列表也随着滑动,而规律就是拼音列表滑动的位置为显示列表的当前位置的文字的首字母决定,当然,直接点击拼音列表的一个位置,显示列表也会直接滑动到对应拼音开头的文字所在位置。

下面看一个使用的示例,这里我们使用本地的XML城市数据文件 来给列表显示数据,只是为了给自己练习SAX解析XML文件。可能大家看起来有点复杂,大家可以用一个简单的List数据测试即可,

而我的这个注意xml文件要放在assets文件夹下

1 
2
3
4
东城区
5
西城区
6
崇文区
7
宣武区
8
朝阳区
9
丰台区
10
石景山区
11
海淀区
12
门头沟区
13
房山区
14
通州区
15
顺义区
16
昌平区
17
大兴区
18
怀柔区
19
平谷区
20
密云县
21
延庆县
22
北京周边
23
24
25
黄浦区
26
卢湾区
27
徐汇区
28
长宁区
29
静安区
30
普陀区
31
闸北区
32
虹口区
33
杨浦区
34
闵行区
35
宝山区
36
嘉定区
37
浦东区
38
金山区
39
松江区
40
奉贤区
41
崇明区
42
南汇区
43
青浦区
44
45
46
荔湾区
47
越秀区
48
海珠区
49
天河区
50
白云区
51
黄埔区
52
番禺区
53
花都区
54
南沙区
55
萝岗区
56
增城
57
58
59
和平区
60
河东区
61
河西区
62
南开区
63
河北区
64
红桥区
65
滨海新区
66
东丽区
67
西青区
68
津南区
69
北辰区
70
武清区
71
宝坻区
72
宁河县
73
静海县
74
蓟县
75
76
77
石家庄市
78
唐山市
79
秦皇岛市
80
邯郸市
81
邢台市
82
保定市
83
张家口市
84
承德市市
85
沧州市
86
廊坊市
87
衡水市
88
89
90
太原市
91
大同市
92
阳泉市
93
长治市
94
晋城市
95
朔州市
96
晋中市
97
运城市
98
忻州市
99
临汾市
100
吕梁市
101
102
103
呼和浩特市
104
包头市
105
乌海市
106
赤峰市
107
通辽市
108
鄂尔多斯市
109
呼伦贝尔市
110
巴彦淖尔市
111
乌兰察布市
112
兴安盟
113
锡林郭勒盟
114
阿拉善盟
115
116
117
沈阳市
118
大连市
119
鞍山市
120
抚顺市
121
本溪市
122
丹东市
123
锦州市
124
营口市
125
阜新市
126
辽阳市
127
盘锦市
128
铁岭市
129
朝阳市
130
葫芦岛市
131
132
133
长春市
134
吉林市
135
四平市
136
辽源市
137
通化市
138
白山市
139
松原市
140
白城市
141
延边朝鲜自治州
142
143
144
哈尔滨市
145
齐齐哈尔市
146
鸡西市
147
鹤岗市
148
双鸭山市
149
大庆市
150
伊春市
151
佳木斯市
152
七台河市
153
牡丹江市
154
黑河市
155
绥化市
156
大兴安岭地区
157
158
159
南京市
160
无锡市
161
徐州市
162
常州市
163
苏州市
164
南通市
165
连云港市
166
淮安市
167
盐城市
168
扬州市
169
镇江市
170
泰州市
171
宿迁市
172
173
174
杭州市
175
宁波市
176
温州市
177
嘉兴市
178
湖州市
179
绍兴市
180
金华市
181
衡州市
182
舟山市
183
台州市
184
丽水市
185
186
187
合肥市
188
芜湖市
189
蚌阜市
190
淮南市
191
马鞍山市
192
淮北市
193
铜陵市
194
安庆市
195
黄山市
196
滁州市
197
阜阳市
198
宿州市
199
六安市
200
毫州市
201
池州市
202
宣城市
203
204
205
福州市
206
厦门市
207
莆田市
208
三明市
209
泉州市
210
漳州市
211
南平市
212
龙岩市
213
宁德市
214
215
216
南昌市
217
景德镇市
218
萍乡市
219
九江市
220
新余市
221
鹰潭市
222
赣州市
223
吉安市
224
宜春市
225
抚州市
226
上饶市
227
228
229
济南市
230
青岛市
231
淄博市
232
枣庄市
233
东营市
234
烟台市
235
潍坊市
236
济宁市
237
泰安市
238
威海市
239
日照市
240
莱芜市
241
临沂市
242
德州市
243
聊城市
244
滨州市
245
菏泽市
246
247
248
郑州市
249
开封市
250
洛阳市
251
平顶山市
252
安阳市
253
鹤壁市
254
新乡市
255
焦作市
256
许昌市
257
漯河市
258
三门峡市
259
南阳市
260
商丘市
261
信阳市
262
周口市
263
驻马店市
264
济源市
265
266
267
武汉市
268
黄石市
269
十堰市
270
宜昌市
271
襄阳市
272
鄂州市
273
荆门市
274
黄冈市
275
咸宁市
276
随州市
277
恩师土家族苗族自治州
278
仙桃市
279
潜江市
280
天门市
281
神农架林市
282
283
284
长沙市
285
株洲市
286
湘潭市
287
衡阳市
288
邵阳市
289
岳阳市
290
常德市
291
张家界市
292
益阳市
293
彬州市
294
永州
295
怀化市
296
娄底市
297
湘西土家族自治州
298
299
300
广州市
301
韶关市
302
深圳市
303
珠海市
304
汕头市
305
佛山市
306
江门市
307
茂名市
308
惠州市
309
梅州市
310
汕尾市
311
河源市
312
阳江市
313
清远市
314
东莞市
315
中山市
316
潮州市
317
揭阳市
318
云浮市
319
320
321
南宁市
322
柳州市
323
桂林市
324
梧州市
325
北海市
326
防城港市
327
钦州市
328
贵港市
329
玉林市
330
百色市
331
贺州市
332
河池市
333
来宾市
334
崇左市
335
336
337
海口市
338
三亚市
339
340
341
万州区
342
渝中区
343
大渡口区
344
江北区
345
沙坪坝区
346
九龙坡区
347
南岸区
348
渝北区
349
巴南区
350
长寿区
351
江津区
352
合川区
353
永川区
354
南川区
355
大足区
356
357
358
成都市
359
自贡市
360
攀枝花市
361
泸州市
362
德阳市
363
锦阳市
364
广元市
365
遂宁市
366
内江市
367
乐山市
368
南充市
369
眉山市
370
宜宾市
371
广安市
372
达州市
373
雅安市
374
巴中市
375
资阳市
376
377
378
贵阳市
379
六盘水市
380
遵义市
381
安抚市
382
铜仁市
383
毕节市
384
385
386
昆明市
387
曲靖市
388
玉溪市
389
保山市
390
昭通市
391
丽江市
392
普洱市
393
临沧市
394
395
396
拉萨市
397
398
399
西安市
400
铜川市
401
宝鸡市
402
咸阳市
403
渭南市
404
延安市
405
汉中市
406
榆林市
407
安康市
408
商洛市
409
410
411
兰州市
412
嘉峪关市
413
金昌市
414
白银市
415
天水市
416
武威市
417
张掖市
418
平凉市
419
酒泉市
420
庆阳市
421
定西市
422
陇南市
423
424
425
西宁市
426
427
428
银川市
429
石嘴山市
430
吴忠市
431
固原市
432
中卫市
433
434
435
乌鲁木齐市
436
克拉玛依市
437
438
439
台北市
440
高雄市
441
基隆市
442
台中市
443
台南市
444
新竹市
445
嘉义市
446
447
448
香港岛
449
九龙
450
新界
451
452
453
澳门半岛
454
澳门离岛
455
456
457
国贸
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
华威桥
532
533
534
中关村
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
五路居
591
592
593
东直门
594
东直门外
595
和平里
596
雍和宫
597
安定门
598
交道口
599
东四十条
600
海运仓
601
北新桥
602
朝阳门
603
建国门
604
北京站
605
王府井
606
景山
607
灯市口
608
沙滩
609
东单
610
东四
611
东城周边
612
613
614
西直门
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
真武庙
640
641
642
崇文门
643
前门
644
新世界
645
广渠门
646
东花市
647
法华寺
648
体育馆路
649
磁器口
650
天坛
651
永定门
652
龙潭湖
653
光明楼
654
崇文周边
655
656
657
广安门外
658
广安门内
659
天宁寺
660
马连道
661
红莲
662
白纸坊
663
南菜园
664
大观园
665
白广路
666
牛街
667
长椿街
668
宣武门
669
椿树街道
670
菜市口
671
陶然亭
672
珠市口
673
虎坊桥
674
天桥
675
大栅栏
676
和平门
677
宣武周边
678
679
680
西客站
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
丰台周边
724
725
726
北关
727
北关环岛
728
永顺
729
新华大街
730
通州北苑
731
八里桥
732
果园
733
九棵树
734
梨园
735
土桥
736
临河里
737
中仓
738
西门
739
乔庄
740
东关
741
运河大街
742
玉桥
743
张家湾
744
八通轻轨沿线
745
武夷花园
746
潞城
747
马驹桥
748
漷县
749
次渠
750
通州周边
751
752
753
八宝山
754
玉泉路
755
鲁谷
756
永乐
757
衙门口
758
八角
759
老山
760
杨庄
761
古城
762
苹果园
763
金顶街
764
模式口
765
五里坨
766
西山
767
八大处
768
石景山周边
769
广宁
770
771
772
长阳
773
良乡
774
阎村
775
迎风
776
窦店
777
房山城关
778
琉璃河
779
韩村河
780
燕山
781
周口店
782
房山周边
783
784
785
天通苑
786
立水桥
787
东小口
788
霍营
789
小汤山
790
北七家
791
回龙观
792
龙泽
793
城北
794
沙河
795
百善
796
阳坊
797
南口
798
城南
799
昌平县城
800
昌平周边
801
南邵镇
802
803
804
亦庄
805
旧宫
806
郁花园
807
同兴园
808
西红门
809
兴华大街
810
清源
811
兴丰大街
812
海子角
813
黄村
814
兴业大街
815
观音寺
816
滨河
817
林校路
818
新宫
819
庞各庄
820
大兴周边
821
822
823
胜利
824
石园
825
天竺
826
新国展
827
机场
828
南彩
829
马坡
830
后沙峪
831
李桥
832
光明
833
裕龙
834
建新
835
杨镇
836
顺义城区
837
中央别墅区
838
顺义周边
839
840
841
密云城区
842
不老屯
843
溪翁庄
844
密云周边
845
846
847
雁栖
848
桥梓
849
怀柔城区
850
渤海镇
851
庙城
852
怀柔周边
853
854
855
延庆城区
856
大榆树
857
八达岭
858
延庆周边
859
860
861
金海湖
862
滨河路
863
平谷城区
864
兴谷
865
渔阳
866
王辛庄
867
平谷周边
868
869
870
大峪
871
东辛房
872
龙泉
873
城子街道
874
永定
875
潭柘寺
876
军庄
877
门头沟周边
878
879
880
香河
881
燕郊
882
三河
883
固安
884
885
886
员村
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
凤凰
930
931
932
赤岗
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
江海
970
971
972
小北
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
洪桥
1009
1010
1011
三元里
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
鹤边
1050
1051
1052
芳村
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
白鹅潭
1088
1089
1090
市桥
1091
祈福
1092
钟村
1093
大石
1094
桥南
1095
洛溪
1096
南浦
1097
华南
1098
石碁
1099
石楼
1100
东涌
1101
鱼窝头
1102
大岗
1103
榄核
1104
沙头
1105
东环
1106
灵山
1107
黄阁
1108
横沥
1109
万顷沙
1110
顺德碧桂园
1111
亚运城
1112
大学城
1113
1114
1115
黄埔
1116
黄埔区府
1117
大沙
1118
文冲
1119
鱼珠
1120
南岗
1121
红山
1122
穗东
1123
长洲
1124
荔联
1125
1126
1127
新华
1128
狮岭
1129
新区
1130
旧区
1131
花城路
1132
花东
1133
雅瑶
1134
花山
1135
芙蓉
1136
炭步
1137
赤坭
1138
北兴
1139
梯面
1140
花侨
1141
1142
1143
开发东区
1144
开发西区
1145
科学城
1146
萝岗镇
1147
1148
1149
龙穴街道
1150
南沙街道
1151
珠江街道
1152
万顷沙镇
1153
黄阁镇
1154
横沥镇
1155
榄核镇
1156
大岗镇
1157
东涌镇
1158
1159
1160
荔城
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
派潭
1188
1189
1190
北新泾
1191
地铁中山公园
1192
古北
1193
虹桥路
1194
江苏路地铁
1195
上海影城
1196
天山路
1197
西郊公园
1198
仙霞
1199
新华路
1200
镇宁路
1201
周家桥
1202
1203
1204
半淞园路
1205
董家渡
1206
黄浦周边
1207
老西门
1208
南京东路
1209
南浦大桥
1210
南外滩
1211
蓬莱公园
1212
人民广场
1213
外滩/十六铺
1214
西藏南路
1215
斜桥
1216
豫园
1217
1218
1219
漕宝路地铁口
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
肇嘉浜路
1245
1246
1247
北京西路
1248
曹家渡
1249
江宁路
1250
静安寺
1251
静安周边
1252
南京西路
1253
上海电视台
1254
西康路
1255
新闸路
1256
玉佛寺
1257
1258
1259
曹杨
1260
长风公园
1261
长寿路
1262
长征
1263
甘泉路
1264
光新
1265
华东师大
1266
建德花园
1267
金沙江路
1268
李子园
1269
普陀周边
1270
轻纺市场
1271
桃浦
1272
万里城
1273
武宁路
1274
宜川路
1275
真光
1276
真如
1277
中远两湾城
1278
1279
1280
宝山路
1281
场中路
1282
大宁路
1283
共和新路
1284
和田地区
1285
老北站
1286
彭浦
1287
天目西路
1288
汶水路
1289
西藏北路
1290
新客站
1291
延长路
1292
闸北公园
1293
闸北周边
1294
芷江西路
1295
1296
1297
北外滩
1298
大柏树
1299
海宁路
1300
和平公园
1301
虹口周边
1302
虹口足球场
1303
江湾
1304
凉城
1305
临平路
1306
鲁迅公园
1307
曲阳路
1308
四川北路
1309
四平路
1310
提篮桥
1311
周家嘴路
1312
1313
1314
鞍山
1315
长白新村
1316
长阳路
1317
东外滩
1318
黄兴
1319
江浦路
1320
控江路
1321
平凉路
1322
五角场
1323
新华医院
1324
新江湾城
1325
杨浦大桥
1326
杨浦公园
1327
杨浦周边
1328
远光旦
1329
中原
1330
周家嘴路
1331
1332
1333
北桥区快
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
诸翟
1362
1363
1364
宝山周边
1365
大场
1366
大华路
1367
东城区
1368
高境
1369
共富新村
1370
共康
1371
顾村
1372
锦秋花园
1373
刘行
1374
罗店
1375
罗泾
1376
罗南
1377
上海大学
1378
水产路
1379
泗塘
1380
淞宝
1381
淞南
1382
通河西城
1383
通河新村
1384
杨行
1385
友谊路
1386
月浦
1387
张庙
1388
1389
1390
安亭
1391
曹王
1392
封浜
1393
丰庄
1394
黄渡
1395
华亭
1396
嘉定城区
1397
嘉定新村
1398
嘉定周边
1399
江桥新城
1400
金鹤新城
1401
菊园新区
1402
娄塘
1403
马陆
1404
南翔
1405
唐行
1406
外冈
1407
徐行
1408
真新
1409
朱桥
1410
1411
1412
八佰伴
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
竹园商贸区
1450
1451
1452
枫泾
1453
朱泾
1454
亭林
1455
漕泾
1456
金山新城
1457
金山周边
1458
金山中部
1459
1460
1461
车墩
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
中山
1487
1488
1489
白鹤
1490
华新镇
1491
金泽
1492
青浦北部
1493
青浦工业园区
1494
青浦新城
1495
青浦周边
1496
香花桥
1497
夏阳街道
1498
徐泾
1499
赵屯
1500
赵巷
1501
重固
1502
朱家角
1503
1504
1505
金汇
1506
南桥
1507
庄行
1508
奉城
1509
柘林
1510
海湾
1511
海湾旅游区
1512
奉贤周边
1513
西渡
1514
1515
1516
城桥
1517
堡镇
1518
陈家
1519
长兴岛
1520
崇明周边
1521
1522
1523
打浦桥
1524
复兴公园
1525
淮海公园
1526
淮海中路
1527
鲁班路
1528
瑞金二路
1529
世博滨江
1530
五里桥
1531
新天地
1532
中山南一路
1533
1534
1535
南汇周边
1536
芦潮港
1537
泥城
1538
航头
1539
新场
1540
惠南
1541
祝桥
1542
周浦
1543
康桥
1544
1545
cityarrays.xml

一、写布局文件:

看上面效果图可以看出,省市名是一种布局,拼音标签是一种布局。那么就需要先写两种布局

1、拼音标签布局

1 
2
12 13
22 23
item_city_list_label.xml

2、省市名布局

1 
2
12 13
22 23
item_city_list_city.xml

3、主布局文件

1 
6 7 8 9
13 14
19
20
28
29 30
42 43 44
main.xml

 

二、现在写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 }
SideBar.java

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 }
City.java

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 }
ParseXml.java

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 }
HanziToPinYin.java

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 List
cities;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 }
CityListAdapter.java

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 }
CityComparator.java

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 }
Constants.xml

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 }
MainActivity.java

最重要的一点:

pinyin4j-2.5.0.jar 这个jar包 一定要有,放在libs下  ,大家可以百度去下载这个jar包

转载地址:http://cgnnx.baihongyu.com/

你可能感兴趣的文章
nginx 项目模块整理shell
查看>>
跨域请求方法及安全问题
查看>>
oracle查询用户下表总数、表字段总数、表记录总数
查看>>
代码管理工具
查看>>
转账数据库的设计
查看>>
浅谈企业建站如何节省成本建好站
查看>>
Windows下搭建TensorFlow环境
查看>>
【Android资料免积分下载】大量教程+工具+源码下载地址汇总
查看>>
使ssh不用输入密码
查看>>
秦令令:移动营销跨越之年
查看>>
电子政务领域的大数据解决思路+-+v1.2-胡书能
查看>>
Two Tables in ScrollView
查看>>
InAppSettingsKit
查看>>
eclipse 整合svn zip包下载地址
查看>>
选择SSL加密证书颁发公司的注意事项
查看>>
【JDK 8特性】让代码更优雅之List排序
查看>>
【CF 应用开发大赛】ChiShaY美食分享LBS
查看>>
产品经理技能树之 渠道运营
查看>>
Ionic build android, Error: spawn EACCES
查看>>
一个表单 两个提交按钮
查看>>