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

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

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

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

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="北京市">
<item>东城区</item>
<item>西城区</item>
<item>崇文区</item>
<item>宣武区</item>
<item>朝阳区</item>
<item>丰台区</item>
<item>石景山区</item>
<item>海淀区</item>
<item>门头沟区</item>
<item>房山区</item>
<item>通州区</item>
<item>顺义区</item>
<item>昌平区</item>
<item>大兴区</item>
<item>怀柔区</item>
<item>平谷区</item>
<item>密云县</item>
<item>延庆县</item>
<item>北京周边</item>
</string-array>
<string-array name="上海市">
<item>黄浦区</item>
<item>卢湾区</item>
<item>徐汇区</item>
<item>长宁区</item>
<item>静安区</item>
<item>普陀区</item>
<item>闸北区</item>
<item>虹口区</item>
<item>杨浦区</item>
<item>闵行区</item>
<item>宝山区</item>
<item>嘉定区</item>
<item>浦东区</item>
<item>金山区</item>
<item>松江区</item>
<item>奉贤区</item>
<item>崇明区</item>
<item>南汇区</item>
<item>青浦区</item>
</string-array>
<string-array name="广州市">
<item>荔湾区</item>
<item>越秀区</item>
<item>海珠区</item>
<item>天河区</item>
<item>白云区</item>
<item>黄埔区</item>
<item>番禺区</item>
<item>花都区</item>
<item>南沙区</item>
<item>萝岗区</item>
<item>增城</item>
</string-array>
<string-array name="天津市">
<item>和平区</item>
<item>河东区</item>
<item>河西区</item>
<item>南开区</item>
<item>河北区</item>
<item>红桥区</item>
<item>滨海新区</item>
<item>东丽区</item>
<item>西青区</item>
<item>津南区</item>
<item>北辰区</item>
<item>武清区</item>
<item>宝坻区</item>
<item>宁河县</item>
<item>静海县</item>
<item>蓟县</item>
</string-array>
<string-array name="河北省">
<item>石家庄市</item>
<item>唐山市</item>
<item>秦皇岛市</item>
<item>邯郸市</item>
<item>邢台市</item>
<item>保定市</item>
<item>张家口市</item>
<item>承德市市</item>
<item>沧州市</item>
<item>廊坊市</item>
<item>衡水市</item>
</string-array>
<string-array name="山西省">
<item>太原市</item>
<item>大同市</item>
<item>阳泉市</item>
<item>长治市</item>
<item>晋城市</item>
<item>朔州市</item>
<item>晋中市</item>
<item>运城市</item>
<item>忻州市</item>
<item>临汾市</item>
<item>吕梁市</item>
</string-array>
<string-array name="内蒙古自治区">
<item>呼和浩特市</item>
<item>包头市</item>
<item>乌海市</item>
<item>赤峰市</item>
<item>通辽市</item>
<item>鄂尔多斯市</item>
<item>呼伦贝尔市</item>
<item>巴彦淖尔市</item>
<item>乌兰察布市</item>
<item>兴安盟</item>
<item>锡林郭勒盟</item>
<item>阿拉善盟</item>
</string-array>
<string-array name="辽宁省">
<item>沈阳市</item>
<item>大连市</item>
<item>鞍山市</item>
<item>抚顺市</item>
<item>本溪市</item>
<item>丹东市</item>
<item>锦州市</item>
<item>营口市</item>
<item>阜新市</item>
<item>辽阳市</item>
<item>盘锦市</item>
<item>铁岭市</item>
<item>朝阳市</item>
<item>葫芦岛市</item>
</string-array>
<string-array name="吉林省">
<item>长春市</item>
<item>吉林市</item>
<item>四平市</item>
<item>辽源市</item>
<item>通化市</item>
<item>白山市</item>
<item>松原市</item>
<item>白城市</item>
<item>延边朝鲜自治州</item>
</string-array>
<string-array name="黑龙江省">
<item>哈尔滨市</item>
<item>齐齐哈尔市</item>
<item>鸡西市</item>
<item>鹤岗市</item>
<item>双鸭山市</item>
<item>大庆市</item>
<item>伊春市</item>
<item>佳木斯市</item>
<item>七台河市</item>
<item>牡丹江市</item>
<item>黑河市</item>
<item>绥化市</item>
<item>大兴安岭地区</item>
</string-array>
<string-array name="江苏省">
<item>南京市</item>
<item>无锡市</item>
<item>徐州市</item>
<item>常州市</item>
<item>苏州市</item>
<item>南通市</item>
<item>连云港市</item>
<item>淮安市</item>
<item>盐城市</item>
<item>扬州市</item>
<item>镇江市</item>
<item>泰州市</item>
<item>宿迁市</item>
</string-array>
<string-array name="浙江省">
<item>杭州市</item>
<item>宁波市</item>
<item>温州市</item>
<item>嘉兴市</item>
<item>湖州市</item>
<item>绍兴市</item>
<item>金华市</item>
<item>衡州市</item>
<item>舟山市</item>
<item>台州市</item>
<item>丽水市</item>
</string-array>
<string-array name="安徽省">
<item>合肥市</item>
<item>芜湖市</item>
<item>蚌阜市</item>
<item>淮南市</item>
<item>马鞍山市</item>
<item>淮北市</item>
<item>铜陵市</item>
<item>安庆市</item>
<item>黄山市</item>
<item>滁州市</item>
<item>阜阳市</item>
<item>宿州市</item>
<item>六安市</item>
<item>毫州市</item>
<item>池州市</item>
<item>宣城市</item>
</string-array>
<string-array name="福建省">
<item>福州市</item>
<item>厦门市</item>
<item>莆田市</item>
<item>三明市</item>
<item>泉州市</item>
<item>漳州市</item>
<item>南平市</item>
<item>龙岩市</item>
<item>宁德市</item>
</string-array>
<string-array name="江西省">
<item>南昌市</item>
<item>景德镇市</item>
<item>萍乡市</item>
<item>九江市</item>
<item>新余市</item>
<item>鹰潭市</item>
<item>赣州市</item>
<item>吉安市</item>
<item>宜春市</item>
<item>抚州市</item>
<item>上饶市</item>
</string-array>
<string-array name="山东省">
<item>济南市</item>
<item>青岛市</item>
<item>淄博市</item>
<item>枣庄市</item>
<item>东营市</item>
<item>烟台市</item>
<item>潍坊市</item>
<item>济宁市</item>
<item>泰安市</item>
<item>威海市</item>
<item>日照市</item>
<item>莱芜市</item>
<item>临沂市</item>
<item>德州市</item>
<item>聊城市</item>
<item>滨州市</item>
<item>菏泽市</item>
</string-array>
<string-array name="河南省">
<item>郑州市</item>
<item>开封市</item>
<item>洛阳市</item>
<item>平顶山市</item>
<item>安阳市</item>
<item>鹤壁市</item>
<item>新乡市</item>
<item>焦作市</item>
<item>许昌市</item>
<item>漯河市</item>
<item>三门峡市</item>
<item>南阳市</item>
<item>商丘市</item>
<item>信阳市</item>
<item>周口市</item>
<item>驻马店市</item>
<item>济源市</item>
</string-array>
<string-array name="湖北省">
<item>武汉市</item>
<item>黄石市</item>
<item>十堰市</item>
<item>宜昌市</item>
<item>襄阳市</item>
<item>鄂州市</item>
<item>荆门市</item>
<item>黄冈市</item>
<item>咸宁市</item>
<item>随州市</item>
<item>恩师土家族苗族自治州</item>
<item>仙桃市</item>
<item>潜江市</item>
<item>天门市</item>
<item>神农架林市</item>
</string-array>
<string-array name="湖南省">
<item>长沙市</item>
<item>株洲市</item>
<item>湘潭市</item>
<item>衡阳市</item>
<item>邵阳市</item>
<item>岳阳市</item>
<item>常德市</item>
<item>张家界市</item>
<item>益阳市</item>
<item>彬州市</item>
<item>永州</item>
<item>怀化市</item>
<item>娄底市</item>
<item>湘西土家族自治州</item>
</string-array>
<string-array name="广东省">
<item>广州市</item>
<item>韶关市</item>
<item>深圳市</item>
<item>珠海市</item>
<item>汕头市</item>
<item>佛山市</item>
<item>江门市</item>
<item>茂名市</item>
<item>惠州市</item>
<item>梅州市</item>
<item>汕尾市</item>
<item>河源市</item>
<item>阳江市</item>
<item>清远市</item>
<item>东莞市</item>
<item>中山市</item>
<item>潮州市</item>
<item>揭阳市</item>
<item>云浮市</item>
</string-array>
<string-array name="广西壮族自治区">
<item>南宁市</item>
<item>柳州市</item>
<item>桂林市</item>
<item>梧州市</item>
<item>北海市</item>
<item>防城港市</item>
<item>钦州市</item>
<item>贵港市</item>
<item>玉林市</item>
<item>百色市</item>
<item>贺州市</item>
<item>河池市</item>
<item>来宾市</item>
<item>崇左市</item>
</string-array>
<string-array name="海南省">
<item>海口市</item>
<item>三亚市</item>
</string-array>
<string-array name="重庆市">
<item>万州区</item>
<item>渝中区</item>
<item>大渡口区</item>
<item>江北区</item>
<item>沙坪坝区</item>
<item>九龙坡区</item>
<item>南岸区</item>
<item>渝北区</item>
<item>巴南区</item>
<item>长寿区</item>
<item>江津区</item>
<item>合川区</item>
<item>永川区</item>
<item>南川区</item>
<item>大足区</item>
</string-array>
<string-array name="四川省">
<item>成都市</item>
<item>自贡市</item>
<item>攀枝花市</item>
<item>泸州市</item>
<item>德阳市</item>
<item>锦阳市</item>
<item>广元市</item>
<item>遂宁市</item>
<item>内江市</item>
<item>乐山市</item>
<item>南充市</item>
<item>眉山市</item>
<item>宜宾市</item>
<item>广安市</item>
<item>达州市</item>
<item>雅安市</item>
<item>巴中市</item>
<item>资阳市</item>
</string-array>
<string-array name="贵州省">
<item>贵阳市</item>
<item>六盘水市</item>
<item>遵义市</item>
<item>安抚市</item>
<item>铜仁市</item>
<item>毕节市</item>
</string-array>
<string-array name="云南省">
<item>昆明市</item>
<item>曲靖市</item>
<item>玉溪市</item>
<item>保山市</item>
<item>昭通市</item>
<item>丽江市</item>
<item>普洱市</item>
<item>临沧市</item>
</string-array>
<string-array name="西藏自治区">
<item>拉萨市</item>
</string-array>
<string-array name="陕西省">
<item>西安市</item>
<item>铜川市</item>
<item>宝鸡市</item>
<item>咸阳市</item>
<item>渭南市</item>
<item>延安市</item>
<item>汉中市</item>
<item>榆林市</item>
<item>安康市</item>
<item>商洛市</item>
</string-array>
<string-array name="甘肃省">
<item>兰州市</item>
<item>嘉峪关市</item>
<item>金昌市</item>
<item>白银市</item>
<item>天水市</item>
<item>武威市</item>
<item>张掖市</item>
<item>平凉市</item>
<item>酒泉市</item>
<item>庆阳市</item>
<item>定西市</item>
<item>陇南市</item>
</string-array>
<string-array name="青海省">
<item>西宁市</item>
</string-array>
<string-array name="宁夏回族自治区">
<item>银川市</item>
<item>石嘴山市</item>
<item>吴忠市</item>
<item>固原市</item>
<item>中卫市</item>
</string-array>
<string-array name="新疆维吾尔自治区">
<item>乌鲁木齐市</item>
<item>克拉玛依市</item>
</string-array>
<string-array name="台湾省">
<item>台北市</item>
<item>高雄市</item>
<item>基隆市</item>
<item>台中市</item>
<item>台南市</item>
<item>新竹市</item>
<item>嘉义市</item>
</string-array>
<string-array name="香港">
<item>香港岛</item>
<item>九龙</item>
<item>新界</item>
</string-array>
<string-array name="澳门">
<item>澳门半岛</item>
<item>澳门离岛</item>
</string-array>
<string-array name="朝阳区">
<item>国贸</item>
<item>CBD</item>
<item>大望路</item>
<item>四惠</item>
<item>双井</item>
<item>劲松</item>
<item>潘家园</item>
<item>广渠门</item>
<item>建外大街</item>
<item>东大桥</item>
<item>工体</item>
<item>朝外大街</item>
<item>京广桥</item>
<item>团结湖</item>
<item>朝阳公园</item>
<item>呼家楼</item>
<item>三里屯</item>
<item>麦子店</item>
<item>燕莎</item>
<item>三元桥</item>
<item>国展</item>
<item>西坝河</item>
<item>柳芳</item>
<item>和平街</item>
<item>左家庄</item>
<item>太阳宫</item>
<item>芍药居</item>
<item>安贞</item>
<item>亚运村</item>
<item>安慧桥</item>
<item>小关</item>
<item>北沙滩</item>
<item>奥运村</item>
<item>大屯</item>
<item>小营</item>
<item>望京</item>
<item>来广营</item>
<item>媒体村</item>
<item>花家地</item>
<item>北苑</item>
<item>大山子</item>
<item>酒仙桥</item>
<item>甘露园</item>
<item>首都机场</item>
<item>东坝</item>
<item>姚家园</item>
<item>水碓子</item>
<item>甜水园</item>
<item>朝青板块</item>
<item>石佛营</item>
<item>十里堡</item>
<item>红庙</item>
<item>百子湾</item>
<item>高碑店</item>
<item>双桥</item>
<item>定福庄</item>
<item>常营</item>
<item>慈云寺</item>
<item>管庄</item>
<item>南磨房</item>
<item>垡头</item>
<item>豆各庄</item>
<item>十八里店</item>
<item>小红门</item>
<item>十里河</item>
<item>惠新西街</item>
<item>将台路</item>
<item>八里庄</item>
<item>欢乐谷</item>
<item>惠新里</item>
<item>朝阳周边</item>
<item>健翔桥</item>
<item>孙河</item>
<item>松榆里</item>
<item>华威桥</item>
</string-array>
<string-array name="海淀区">
<item>中关村</item>
<item>北京大学</item>
<item>清华大学</item>
<item>五道口</item>
<item>上地</item>
<item>西三旗</item>
<item>西二旗</item>
<item>清河</item>
<item>二里庄</item>
<item>学院路</item>
<item>知春路</item>
<item>牡丹园</item>
<item>北航</item>
<item>北太平庄</item>
<item>蓟门桥</item>
<item>双榆树</item>
<item>人民大学</item>
<item>皂君庙</item>
<item>大钟寺</item>
<item>魏公村</item>
<item>白石桥</item>
<item>交通大学</item>
<item>紫竹桥</item>
<item>花园桥</item>
<item>北洼路</item>
<item>航天桥</item>
<item>甘家口</item>
<item>军博</item>
<item>公主坟</item>
<item>厂洼</item>
<item>万寿路</item>
<item>五棵松</item>
<item>永定路</item>
<item>西八里庄</item>
<item>定慧寺</item>
<item>田村</item>
<item>四季青</item>
<item>香山</item>
<item>世纪城</item>
<item>苏州桥</item>
<item>苏州街</item>
<item>万泉河</item>
<item>万柳</item>
<item>增光路</item>
<item>西苑</item>
<item>马连洼</item>
<item>西北旺</item>
<item>车道沟</item>
<item>西山</item>
<item>万寿寺</item>
<item>明光桥</item>
<item>安宁庄</item>
<item>海淀周边</item>
<item>联想桥</item>
<item>金沟河</item>
<item>恩济里</item>
<item>五路居</item>
</string-array>
<string-array name="东城区">
<item>东直门</item>
<item>东直门外</item>
<item>和平里</item>
<item>雍和宫</item>
<item>安定门</item>
<item>交道口</item>
<item>东四十条</item>
<item>海运仓</item>
<item>北新桥</item>
<item>朝阳门</item>
<item>建国门</item>
<item>北京站</item>
<item>王府井</item>
<item>景山</item>
<item>灯市口</item>
<item>沙滩</item>
<item>东单</item>
<item>东四</item>
<item>东城周边</item>
</string-array>
<string-array name="西城区">
<item>西直门</item>
<item>车公庄</item>
<item>官园</item>
<item>百万庄</item>
<item>阜成门</item>
<item>西四</item>
<item>展览路</item>
<item>月坛</item>
<item>金融街</item>
<item>西单</item>
<item>德胜门</item>
<item>六铺炕</item>
<item>积水潭</item>
<item>小西天</item>
<item>新街口</item>
<item>马甸</item>
<item>鼓楼</item>
<item>地安门</item>
<item>复兴门</item>
<item>西便门</item>
<item>南礼士路</item>
<item>什刹海</item>
<item>木樨地</item>
<item>三里河</item>
<item>西城周边</item>
<item>真武庙</item>
</string-array>
<string-array name="崇文区">
<item>崇文门</item>
<item>前门</item>
<item>新世界</item>
<item>广渠门</item>
<item>东花市</item>
<item>法华寺</item>
<item>体育馆路</item>
<item>磁器口</item>
<item>天坛</item>
<item>永定门</item>
<item>龙潭湖</item>
<item>光明楼</item>
<item>崇文周边</item>
</string-array>
<string-array name="宣武区">
<item>广安门外</item>
<item>广安门内</item>
<item>天宁寺</item>
<item>马连道</item>
<item>红莲</item>
<item>白纸坊</item>
<item>南菜园</item>
<item>大观园</item>
<item>白广路</item>
<item>牛街</item>
<item>长椿街</item>
<item>宣武门</item>
<item>椿树街道</item>
<item>菜市口</item>
<item>陶然亭</item>
<item>珠市口</item>
<item>虎坊桥</item>
<item>天桥</item>
<item>大栅栏</item>
<item>和平门</item>
<item>宣武周边</item>
</string-array>
<string-array name="丰台区">
<item>西客站</item>
<item>太平桥</item>
<item>六里桥</item>
<item>丰台路</item>
<item>青塔</item>
<item>岳各庄</item>
<item>卢沟桥</item>
<item>长辛店</item>
<item>云岗</item>
<item>北大地</item>
<item>丰台体育馆</item>
<item>丽泽桥</item>
<item>科技园区</item>
<item>世界公园</item>
<item>花乡</item>
<item>玉泉营</item>
<item>菜户营</item>
<item>西罗园</item>
<item>右安门</item>
<item>草桥</item>
<item>洋桥</item>
<item>木樨园</item>
<item>新发地</item>
<item>赵公口</item>
<item>嘉园</item>
<item>刘家窑</item>
<item>蒲黄榆</item>
<item>左安门</item>
<item>方庄</item>
<item>东铁匠营</item>
<item>丰益桥</item>
<item>看丹桥</item>
<item>成寿寺</item>
<item>宋家庄</item>
<item>大红门</item>
<item>七里庄</item>
<item>马家堡</item>
<item>五里店</item>
<item>角门</item>
<item>南苑</item>
<item>东高地</item>
<item>和义</item>
<item>莲花池</item>
<item>丰台周边</item>
</string-array>
<string-array name="通州区">
<item>北关</item>
<item>北关环岛</item>
<item>永顺</item>
<item>新华大街</item>
<item>通州北苑</item>
<item>八里桥</item>
<item>果园</item>
<item>九棵树</item>
<item>梨园</item>
<item>土桥</item>
<item>临河里</item>
<item>中仓</item>
<item>西门</item>
<item>乔庄</item>
<item>东关</item>
<item>运河大街</item>
<item>玉桥</item>
<item>张家湾</item>
<item>八通轻轨沿线</item>
<item>武夷花园</item>
<item>潞城</item>
<item>马驹桥</item>
<item>漷县</item>
<item>次渠</item>
<item>通州周边</item>
</string-array>
<string-array name="石景山区">
<item>八宝山</item>
<item>玉泉路</item>
<item>鲁谷</item>
<item>永乐</item>
<item>衙门口</item>
<item>八角</item>
<item>老山</item>
<item>杨庄</item>
<item>古城</item>
<item>苹果园</item>
<item>金顶街</item>
<item>模式口</item>
<item>五里坨</item>
<item>西山</item>
<item>八大处</item>
<item>石景山周边</item>
<item>广宁</item>
</string-array>
<string-array name="房山区">
<item>长阳</item>
<item>良乡</item>
<item>阎村</item>
<item>迎风</item>
<item>窦店</item>
<item>房山城关</item>
<item>琉璃河</item>
<item>韩村河</item>
<item>燕山</item>
<item>周口店</item>
<item>房山周边</item>
</string-array>
<string-array name="昌平区">
<item>天通苑</item>
<item>立水桥</item>
<item>东小口</item>
<item>霍营</item>
<item>小汤山</item>
<item>北七家</item>
<item>回龙观</item>
<item>龙泽</item>
<item>城北</item>
<item>沙河</item>
<item>百善</item>
<item>阳坊</item>
<item>南口</item>
<item>城南</item>
<item>昌平县城</item>
<item>昌平周边</item>
<item>南邵镇</item>
</string-array>
<string-array name="大兴区">
<item>亦庄</item>
<item>旧宫</item>
<item>郁花园</item>
<item>同兴园</item>
<item>西红门</item>
<item>兴华大街</item>
<item>清源</item>
<item>兴丰大街</item>
<item>海子角</item>
<item>黄村</item>
<item>兴业大街</item>
<item>观音寺</item>
<item>滨河</item>
<item>林校路</item>
<item>新宫</item>
<item>庞各庄</item>
<item>大兴周边</item>
</string-array>
<string-array name="顺义区">
<item>胜利</item>
<item>石园</item>
<item>天竺</item>
<item>新国展</item>
<item>机场</item>
<item>南彩</item>
<item>马坡</item>
<item>后沙峪</item>
<item>李桥</item>
<item>光明</item>
<item>裕龙</item>
<item>建新</item>
<item>杨镇</item>
<item>顺义城区</item>
<item>中央别墅区</item>
<item>顺义周边</item>
</string-array>
<string-array name="密云县">
<item>密云城区</item>
<item>不老屯</item>
<item>溪翁庄</item>
<item>密云周边</item>
</string-array>
<string-array name="怀柔区">
<item>雁栖</item>
<item>桥梓</item>
<item>怀柔城区</item>
<item>渤海镇</item>
<item>庙城</item>
<item>怀柔周边</item>
</string-array>
<string-array name="延庆县">
<item>延庆城区</item>
<item>大榆树</item>
<item>八达岭</item>
<item>延庆周边</item>
</string-array>
<string-array name="平谷区">
<item>金海湖</item>
<item>滨河路</item>
<item>平谷城区</item>
<item>兴谷</item>
<item>渔阳</item>
<item>王辛庄</item>
<item>平谷周边</item>
</string-array>
<string-array name="门头沟区">
<item>大峪</item>
<item>东辛房</item>
<item>龙泉</item>
<item>城子街道</item>
<item>永定</item>
<item>潭柘寺</item>
<item>军庄</item>
<item>门头沟周边</item>
</string-array>
<string-array name="北京周边">
<item>香河</item>
<item>燕郊</item>
<item>三河</item>
<item>固安</item>
</string-array>
<string-array name="天河区">
<item>员村</item>
<item>东圃</item>
<item>车陂</item>
<item>黄村</item>
<item>棠下</item>
<item>上社</item>
<item>华景新城</item>
<item>天河公园</item>
<item>石牌</item>
<item>岗顶</item>
<item>龙口西</item>
<item>龙口东</item>
<item>五山</item>
<item>天河北</item>
<item>林和</item>
<item>体育中心</item>
<item>体育西路</item>
<item>天河南</item>
<item>天河东路</item>
<item>黄埔大道西</item>
<item>猎德</item>
<item>冼村</item>
<item>珠江新城</item>
<item>广州大道中</item>
<item>沙河</item>
<item>天平架</item>
<item>粤垦</item>
<item>沙太南</item>
<item>天河客运站</item>
<item>元岗</item>
<item>长兴</item>
<item>长湴</item>
<item>植物园</item>
<item>龙洞</item>
<item>新塘</item>
<item>珠吉</item>
<item>中山大道</item>
<item>前进</item>
<item>员村二横路</item>
<item>兴华</item>
<item>沙东</item>
<item>天园</item>
<item>登峰</item>
<item>凤凰</item>
</string-array>
<string-array name="海珠区">
<item>赤岗</item>
<item>客村</item>
<item>广州大道南</item>
<item>新港</item>
<item>新港西</item>
<item>中大</item>
<item>下渡路</item>
<item>怡乐路</item>
<item>琶洲</item>
<item>东晓南</item>
<item>晓港</item>
<item>昌岗</item>
<item>江南大道南</item>
<item>江南西</item>
<item>江南中</item>
<item>江南大道中</item>
<item>前进路</item>
<item>素社</item>
<item>滨江东</item>
<item>滨江</item>
<item>宝岗</item>
<item>南华西</item>
<item>工业大道北</item>
<item>沙园</item>
<item>工业大道</item>
<item>南石头</item>
<item>江燕路</item>
<item>海幢</item>
<item>工业大道南</item>
<item>南洲</item>
<item>沥滘</item>
<item>官洲</item>
<item>华洲</item>
<item>工业大道中</item>
<item>瑞宝</item>
<item>凤阳</item>
<item>龙凤</item>
<item>江海</item>
</string-array>
<string-array name="越秀区">
<item>小北</item>
<item>环市东</item>
<item>建设</item>
<item>淘金</item>
<item>黄花岗</item>
<item>水荫路</item>
<item>东风东</item>
<item>梅花村</item>
<item>杨箕村</item>
<item>五羊新城</item>
<item>东山口</item>
<item>农林下路</item>
<item>中山路</item>
<item>东川</item>
<item>农讲所</item>
<item>广卫</item>
<item>北京路</item>
<item>解放南</item>
<item>解放北</item>
<item>流花</item>
<item>东风路</item>
<item>盘福路</item>
<item>六榕</item>
<item>西门口</item>
<item>大新</item>
<item>人民</item>
<item>嘉禾</item>
<item>白云</item>
<item>大沙头</item>
<item>东湖</item>
<item>二沙岛</item>
<item>光塔</item>
<item>环市中</item>
<item>大东</item>
<item>华乐</item>
<item>诗书</item>
<item>洪桥</item>
</string-array>
<string-array name="白云区">
<item>三元里</item>
<item>新市</item>
<item>黄石</item>
<item>机场路</item>
<item>同和</item>
<item>京溪</item>
<item>梅花园</item>
<item>广州大道北</item>
<item>广园路</item>
<item>棠景</item>
<item>同德围</item>
<item>西槎路</item>
<item>罗冲围</item>
<item>金沙洲</item>
<item>石井</item>
<item>景泰</item>
<item>白云大道南</item>
<item>白云大道北</item>
<item>黄边</item>
<item>嘉禾望岗</item>
<item>桂花岗</item>
<item>伍仙桥</item>
<item>沙太北</item>
<item>龙归</item>
<item>人和</item>
<item>南湖</item>
<item>永平</item>
<item>太和</item>
<item>广花</item>
<item>均禾</item>
<item>江高</item>
<item>钟落潭</item>
<item>竹料</item>
<item>良田</item>
<item>九佛</item>
<item>神山</item>
<item>矿泉</item>
<item>松洲</item>
<item>鹤边</item>
</string-array>
<string-array name="荔湾区">
<item>芳村</item>
<item>站前</item>
<item>西村</item>
<item>环市西</item>
<item>南岸路</item>
<item>中山八路</item>
<item>西关</item>
<item>周门</item>
<item>荔湾路</item>
<item>陈家祠</item>
<item>东风西</item>
<item>西华路</item>
<item>光复北路</item>
<item>康王路</item>
<item>龙津</item>
<item>上下九</item>
<item>沙面</item>
<item>黄沙</item>
<item>花地湾</item>
<item>坑口</item>
<item>白鹤洞</item>
<item>龙溪</item>
<item>桥东</item>
<item>窖口</item>
<item>桥中</item>
<item>昌华</item>
<item>黄岐</item>
<item>华林</item>
<item>岭南</item>
<item>逢源</item>
<item>多宝</item>
<item>金花</item>
<item>南源</item>
<item>彩虹</item>
<item>第一津街</item>
<item>白鹅潭</item>
</string-array>
<string-array name="番禺区">
<item>市桥</item>
<item>祈福</item>
<item>钟村</item>
<item>大石</item>
<item>桥南</item>
<item>洛溪</item>
<item>南浦</item>
<item>华南</item>
<item>石碁</item>
<item>石楼</item>
<item>东涌</item>
<item>鱼窝头</item>
<item>大岗</item>
<item>榄核</item>
<item>沙头</item>
<item>东环</item>
<item>灵山</item>
<item>黄阁</item>
<item>横沥</item>
<item>万顷沙</item>
<item>顺德碧桂园</item>
<item>亚运城</item>
<item>大学城</item>
</string-array>
<string-array name="黄埔区">
<item>黄埔</item>
<item>黄埔区府</item>
<item>大沙</item>
<item>文冲</item>
<item>鱼珠</item>
<item>南岗</item>
<item>红山</item>
<item>穗东</item>
<item>长洲</item>
<item>荔联</item>
</string-array>
<string-array name="花都区">
<item>新华</item>
<item>狮岭</item>
<item>新区</item>
<item>旧区</item>
<item>花城路</item>
<item>花东</item>
<item>雅瑶</item>
<item>花山</item>
<item>芙蓉</item>
<item>炭步</item>
<item>赤坭</item>
<item>北兴</item>
<item>梯面</item>
<item>花侨</item>
</string-array>
<string-array name="萝岗区">
<item>开发东区</item>
<item>开发西区</item>
<item>科学城</item>
<item>萝岗镇</item>
</string-array>
<string-array name="南沙区">
<item>龙穴街道</item>
<item>南沙街道</item>
<item>珠江街道</item>
<item>万顷沙镇</item>
<item>黄阁镇</item>
<item>横沥镇</item>
<item>榄核镇</item>
<item>大岗镇</item>
<item>东涌镇</item>
</string-array>
<string-array name="增城">
<item>荔城</item>
<item>荔城</item>
<item>新塘</item>
<item>广园东</item>
<item>永和</item>
<item>三江</item>
<item>朱村</item>
<item>仙村</item>
<item>沙庄</item>
<item>中新</item>
<item>小楼</item>
<item>正果</item>
<item>镇龙</item>
<item>福和</item>
<item>派潭</item>
<item>新塘</item>
<item>广园东</item>
<item>永和</item>
<item>三江</item>
<item>朱村</item>
<item>仙村</item>
<item>沙庄</item>
<item>中新</item>
<item>小楼</item>
<item>正果</item>
<item>镇龙</item>
<item>福和</item>
<item>派潭</item>
</string-array>
<string-array name="长宁区">
<item>北新泾</item>
<item>地铁中山公园</item>
<item>古北</item>
<item>虹桥路</item>
<item>江苏路地铁</item>
<item>上海影城</item>
<item>天山路</item>
<item>西郊公园</item>
<item>仙霞</item>
<item>新华路</item>
<item>镇宁路</item>
<item>周家桥</item>
</string-array>
<string-array name="黄浦区">
<item>半淞园路</item>
<item>董家渡</item>
<item>黄浦周边</item>
<item>老西门</item>
<item>南京东路</item>
<item>南浦大桥</item>
<item>南外滩</item>
<item>蓬莱公园</item>
<item>人民广场</item>
<item>外滩/十六铺</item>
<item>西藏南路</item>
<item>斜桥</item>
<item>豫园</item>
</string-array>
<string-array name="徐汇区">
<item>漕宝路地铁口</item>
<item>漕河泾</item>
<item>长桥</item>
<item>枫林路</item>
<item>复兴中路</item>
<item>衡山路</item>
<item>华东理工</item>
<item>淮海西路</item>
<item>华泾</item>
<item>湖南路</item>
<item>康建</item>
<item>凌云路</item>
<item>龙华</item>
<item>日晖新村</item>
<item>上海交大</item>
<item>上海南站</item>
<item>上海师大</item>
<item>上海图书馆</item>
<item>上海植物园</item>
<item>田林</item>
<item>万体馆</item>
<item>襄阳公园</item>
<item>斜土路</item>
<item>徐汇周边</item>
<item>徐家汇</item>
<item>肇嘉浜路</item>
</string-array>
<string-array name="静安区">
<item>北京西路</item>
<item>曹家渡</item>
<item>江宁路</item>
<item>静安寺</item>
<item>静安周边</item>
<item>南京西路</item>
<item>上海电视台</item>
<item>西康路</item>
<item>新闸路</item>
<item>玉佛寺</item>
</string-array>
<string-array name="普陀区">
<item>曹杨</item>
<item>长风公园</item>
<item>长寿路</item>
<item>长征</item>
<item>甘泉路</item>
<item>光新</item>
<item>华东师大</item>
<item>建德花园</item>
<item>金沙江路</item>
<item>李子园</item>
<item>普陀周边</item>
<item>轻纺市场</item>
<item>桃浦</item>
<item>万里城</item>
<item>武宁路</item>
<item>宜川路</item>
<item>真光</item>
<item>真如</item>
<item>中远两湾城</item>
</string-array>
<string-array name="闸北区">
<item>宝山路</item>
<item>场中路</item>
<item>大宁路</item>
<item>共和新路</item>
<item>和田地区</item>
<item>老北站</item>
<item>彭浦</item>
<item>天目西路</item>
<item>汶水路</item>
<item>西藏北路</item>
<item>新客站</item>
<item>延长路</item>
<item>闸北公园</item>
<item>闸北周边</item>
<item>芷江西路</item>
</string-array>
<string-array name="虹口区">
<item>北外滩</item>
<item>大柏树</item>
<item>海宁路</item>
<item>和平公园</item>
<item>虹口周边</item>
<item>虹口足球场</item>
<item>江湾</item>
<item>凉城</item>
<item>临平路</item>
<item>鲁迅公园</item>
<item>曲阳路</item>
<item>四川北路</item>
<item>四平路</item>
<item>提篮桥</item>
<item>周家嘴路</item>
</string-array>
<string-array name="杨浦区">
<item>鞍山</item>
<item>长白新村</item>
<item>长阳路</item>
<item>东外滩</item>
<item>黄兴</item>
<item>江浦路</item>
<item>控江路</item>
<item>平凉路</item>
<item>五角场</item>
<item>新华医院</item>
<item>新江湾城</item>
<item>杨浦大桥</item>
<item>杨浦公园</item>
<item>杨浦周边</item>
<item>远光旦</item>
<item>中原</item>
<item>周家嘴路</item>
</string-array>
<string-array name="闵行区">
<item>北桥区快</item>
<item>漕宝路</item>
<item>春申</item>
<item>东兰新村</item>
<item>凤溪</item>
<item>古美罗阳</item>
<item>航华</item>
<item>虹梅路</item>
<item>虹桥</item>
<item>华漕</item>
<item>江川路</item>
<item>静安新城</item>
<item>金虹桥</item>
<item>纪王</item>
<item>老闵行</item>
<item>龙柏金汇</item>
<item>马桥</item>
<item>梅陇</item>
<item>闵行周边</item>
<item>南方商城</item>
<item>浦江</item>
<item>蔷薇新村</item>
<item>七宝</item>
<item>七莘路</item>
<item>莘庄</item>
<item>莘庄工业区</item>
<item>吴泾</item>
<item>颛桥</item>
<item>诸翟</item>
</string-array>
<string-array name="宝山区">
<item>宝山周边</item>
<item>大场</item>
<item>大华路</item>
<item>东城区</item>
<item>高境</item>
<item>共富新村</item>
<item>共康</item>
<item>顾村</item>
<item>锦秋花园</item>
<item>刘行</item>
<item>罗店</item>
<item>罗泾</item>
<item>罗南</item>
<item>上海大学</item>
<item>水产路</item>
<item>泗塘</item>
<item>淞宝</item>
<item>淞南</item>
<item>通河西城</item>
<item>通河新村</item>
<item>杨行</item>
<item>友谊路</item>
<item>月浦</item>
<item>张庙</item>
</string-array>
<string-array name="嘉定区">
<item>安亭</item>
<item>曹王</item>
<item>封浜</item>
<item>丰庄</item>
<item>黄渡</item>
<item>华亭</item>
<item>嘉定城区</item>
<item>嘉定新村</item>
<item>嘉定周边</item>
<item>江桥新城</item>
<item>金鹤新城</item>
<item>菊园新区</item>
<item>娄塘</item>
<item>马陆</item>
<item>南翔</item>
<item>唐行</item>
<item>外冈</item>
<item>徐行</item>
<item>真新</item>
<item>朱桥</item>
</string-array>
<string-array name="浦东区">
<item>八佰伴</item>
<item>北蔡</item>
<item>碧云</item>
<item>曹路</item>
<item>昌里</item>
<item>川沙</item>
<item>东昌站地铁站</item>
<item>东方路地铁</item>
<item>东明路</item>
<item>高桥</item>
<item>高行</item>
<item>合庆</item>
<item>花木</item>
<item>金桥</item>
<item>金杨新村</item>
<item>联洋</item>
<item>临港新城</item>
<item>六里</item>
<item>龙阳路地铁站</item>
<item>陆家嘴</item>
<item>梅园</item>
<item>南码头</item>
<item>浦东周边</item>
<item>三林</item>
<item>上钢新村</item>
<item>上南</item>
<item>世博滨江</item>
<item>世纪公园</item>
<item>塘桥</item>
<item>唐镇</item>
<item>外高桥</item>
<item>潍坊新村</item>
<item>杨东</item>
<item>洋泾</item>
<item>御桥</item>
<item>张江</item>
<item>周家渡</item>
<item>竹园商贸区</item>
</string-array>
<string-array name="金山区">
<item>枫泾</item>
<item>朱泾</item>
<item>亭林</item>
<item>漕泾</item>
<item>金山新城</item>
<item>金山周边</item>
<item>金山中部</item>
</string-array>
<string-array name="松江区">
<item>车墩</item>
<item>大港</item>
<item>洞泾</item>
<item>方松</item>
<item>九亭</item>
<item>练塘</item>
<item>泖港</item>
<item>茸北</item>
<item>莘闵</item>
<item>佘山</item>
<item>石湖荡</item>
<item>泗泾</item>
<item>松江大学城</item>
<item>松江工业区</item>
<item>松江科技园</item>
<item>松江老城</item>
<item>松江新城</item>
<item>松江周边</item>
<item>塔汇</item>
<item>小昆山</item>
<item>新浜</item>
<item>新桥</item>
<item>叶榭</item>
<item>永丰</item>
<item>岳阳</item>
<item>中山</item>
</string-array>
<string-array name="青浦区">
<item>白鹤</item>
<item>华新镇</item>
<item>金泽</item>
<item>青浦北部</item>
<item>青浦工业园区</item>
<item>青浦新城</item>
<item>青浦周边</item>
<item>香花桥</item>
<item>夏阳街道</item>
<item>徐泾</item>
<item>赵屯</item>
<item>赵巷</item>
<item>重固</item>
<item>朱家角</item>
</string-array>
<string-array name="奉贤区">
<item>金汇</item>
<item>南桥</item>
<item>庄行</item>
<item>奉城</item>
<item>柘林</item>
<item>海湾</item>
<item>海湾旅游区</item>
<item>奉贤周边</item>
<item>西渡</item>
</string-array>
<string-array name="崇明区">
<item>城桥</item>
<item>堡镇</item>
<item>陈家</item>
<item>长兴岛</item>
<item>崇明周边</item>
</string-array>
<string-array name="卢湾区">
<item>打浦桥</item>
<item>复兴公园</item>
<item>淮海公园</item>
<item>淮海中路</item>
<item>鲁班路</item>
<item>瑞金二路</item>
<item>世博滨江</item>
<item>五里桥</item>
<item>新天地</item>
<item>中山南一路</item>
</string-array>
<string-array name="南汇区">
<item>南汇周边</item>
<item>芦潮港</item>
<item>泥城</item>
<item>航头</item>
<item>新场</item>
<item>惠南</item>
<item>祝桥</item>
<item>周浦</item>
<item>康桥</item>
</string-array>
</resources>

cityarrays.xml

一、写布局文件:

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

1、拼音标签布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerPadding="1dp"
android:paddingLeft="10dp"
android:paddingBottom="2dp"
android:paddingTop="2dp"
android:background="#F5F5F5"
> <TextView
android:id="@+id/tv_item_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#f00"
android:textSize="18sp"
android:padding="2dp"
android:text="label"
/> </LinearLayout>

item_city_list_label.xml

2、省市名布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerPadding="1dp"
android:paddingLeft="10dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:background="#FFFFFF"
> <TextView
android:id="@+id/tv_item_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:padding="2dp"
android:textSize="18sp"
android:text="city"
/> </LinearLayout>

item_city_list_city.xml

3、主布局文件

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.archie.lazyhousewifeiy.cityandauntdetail.CityListActivity"> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
> <ListView
android:id="@+id/list_view_cities"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!-- 这里就是我们要使用的自定义拼音列表了,注意SideBar前面是你自己的包名,这里我的包名为:com.xqx.SideBarDemo-->
<com.xqx.SideBarDemo.SideBar
android:id="@+id/side_bar"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:paddingTop="10dp"
android:paddingBottom="10dp"
/>
</RelativeLayout> <TextView
android:id="@+id/tv_text_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#D2D2D2"
android:visibility="gone"
android:padding="10dp"
android:textColor="#2DB7E1"
android:textSize="30sp"
android:text="A"
/> </RelativeLayout>

main.xml

二、现在写java代码了

1、首先看我们主要使用的一个自定义View,用来显示拼音列表,大家可以看看源码,将内容显示为自己喜欢的样子

 package com.xqx.SideBarDemo;

 import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView; public class SideBar extends View { public String[] characters = new String[] { "#", "A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z" }; private Paint paint;
private int textSize = ; //拼音文字大小
private int defaultTextColor = //默认拼音文字的颜色 Color.parseColor("#D2D2D2");
private int selectedTextColor = //选中后的拼音文字的颜色 Color.parseColor("#2DB7E1");
private int touchedBgColor = //触摸时的拼音文字的颜色 Color.parseColor("#F5F5F5");
private TextView text_dialog; private OnTouchingLetterChangedListener onTouchingLetterChangedListener; private int position = -; public SideBar(Context context) {
super(context);
} public SideBar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} public SideBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
} public void setTextDialog(TextView textView){
this.text_dialog = textView;
} private void init() {
paint = new Paint();
paint.setAntiAlias(true);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); int height = getHeight();
int width = getWidth();
int singleHeight = height / characters.length; for (int i = ; i < characters.length; i++) {
if (i == position) {
paint.setColor(selectedTextColor);
} else {
paint.setColor(defaultTextColor);
}
paint.setTextSize(textSize); float xPos = width / - paint.measureText(characters[i]) / ;
float yPos = singleHeight * i + singleHeight;
canvas.drawText(characters[i], xPos, yPos, paint);
}
} @Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
float y = event.getY();
position = (int) (y / (getHeight() / characters.length));
if (position >= && position < Constants.CITY_TYPE.length) {
onTouchingLetterChangedListener.onTouchingLetterChanged(position);
switch (action) {
case MotionEvent.ACTION_UP:
setBackgroundColor(Color.TRANSPARENT);
position = -;
invalidate();
if (text_dialog != null) {
text_dialog.setVisibility(View.INVISIBLE);
}
break;
default:
setBackgroundColor(touchedBgColor);
invalidate();
text_dialog.setText(characters[position]);
break;
}
}else{
setBackgroundColor(Color.TRANSPARENT);
if (text_dialog != null) {
text_dialog.setVisibility(View.INVISIBLE);
} }
return true;
} public void setOnTouchingLetterChangedListener(
OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
} public interface OnTouchingLetterChangedListener {
public void onTouchingLetterChanged(int position);
} }

SideBar.java

2、创建一个city的实体类

 package com.xqx.SideBarDemo;

 public class City {
// 标记 拼音,label
public static final int CITY_TYPE_LABEL = ;
// 标记 城市名
public static final int CITY_TYPE_CITY = ; private String cityName; //城市名
private String cityType; //城市类型 @Override
public String toString() {
return "City{" +
"cityName='" + cityName + '\'' +
", cityType='" + cityType + '\'' +
'}';
} public static int getTypeCount(){
return ;
} public int getType(){ if(cityType.equals("label")){
return CITY_TYPE_LABEL;
}else{
return CITY_TYPE_CITY;
} } public String getCityName() {
return cityName;
} public void setCityName(String cityName) {
this.cityName = cityName;
} public void setCityType(String cityType) {
this.cityType = cityType;
}
}

City.java

3、解析本地xml省市数据文件,获得省市的实体类列表

 package com.xqx.SideBarDemo;

 import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; /**
* 解析本地xml文件 SAX解析
*/
public class ParseXml extends DefaultHandler { private TreeMap<String, List<String>> cities; private List<String> city; // 城市列表第一层
private List<String> cityList; private String tagName; // 城市列表第一层城市数量
private int cityNum = ; public ParseXml(InputStream in) { SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); parser.parse(in, this); } catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } public TreeMap<String, List<String>> getCities(){ return cities; } public List<String> getCityList(){ return cityList; } @Override
public void startDocument() throws SAXException { cities = new TreeMap<String, List<String>>(new CityComparator()); cityList = new ArrayList<String>(); } @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tagName = qName; if("string-array".equals(qName)){ if (attributes != null){ for (int i = ; i < attributes.getLength(); i++) { String attrName = attributes.getQName(i); String attrValue = attributes.getValue(i); if("name".equals(attrName)){ city = new ArrayList<String>(); cities.put(attrValue, city); if(cityNum <= Constants.CITY_NUMBER) { cityList.add(attrValue); cityNum ++;
} } } } } } @Override
public void characters(char[] ch, int start, int length) throws SAXException { String data = new String(ch, start, length); if("item".equals(tagName)){ city.add(data); } } @Override
public void endElement(String uri, String localName, String qName) throws SAXException { tagName = null; } @Override
public void endDocument() throws SAXException {
} }

ParseXml.java

4、汉字转换为拼音的类

 package com.xqx.SideBarDemo;

 import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class HanziToPinYin { /**
* 如果字符串string是汉字,则转为拼音并返回
* @param string
* @return
*/
public static char toPinYin(String string){
HanyuPinyinOutputFormat hanyuPinyin = new HanyuPinyinOutputFormat();
hanyuPinyin.setCaseType(HanyuPinyinCaseType.UPPERCASE);
hanyuPinyin.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
hanyuPinyin.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyinArray=null;
char hanzi = string.charAt();
try {
//是否在汉字范围内
if(hanzi>=0x4e00 && hanzi<=0x9fa5){
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi, hanyuPinyin);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
//将获取到的拼音返回
return pinyinArray[].charAt();
} }

HanziToPinYin.java

5、ListView的适配器

 package com.xqx.SideBarDemo;

 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import java.util.List; public class CityListAdapter extends BaseAdapter { private List<City> cities;
private Context context;
public CityListAdapter(Context context, List<City> cities) {
this.cities = cities;
this.context = context;
}
@Override
public int getCount() {
return cities.size();
}
@Override
public int getViewTypeCount() {
return City.getTypeCount();
}
@Override
public Object getItem(int position) {
return cities.get(position);
}
@Override
public long getItemId(int position) {
return position;
} @Override
public int getItemViewType(int position) {
return cities.get(position).getType();
} //判断是否可以点击,即判断是否是省市名拼音
@Override
public boolean isEnabled(int position) { if (getItemViewType(position) == City.CITY_TYPE_LABEL){
return false;
}
return super.isEnabled(position);
} @Override
public View getView(int position, View convertView, ViewGroup parent) { // 如果是label 即拼音 就为label布局
if(getItemViewType(position) == City.CITY_TYPE_LABEL){
convertView = LayoutInflater.from(context).inflate(R.layout.item_city_list_label, parent, false);
}else{
//如果是城市,则为城市名称布局
convertView = LayoutInflater.from(context).inflate(R.layout.item_city_list_city, parent, false);
}
//显示列表项文字
TextView tv = (TextView) convertView.findViewById(R.id.tv_item_city);
tv.setText(cities.get(position).getCityName());
return convertView;
}
}

CityListAdapter.java

6、处理重庆问题(重庆会被分析为zhongqin ,注意,自己测试)

 package com.xqx.SideBarDemo;

 import java.text.CollationKey;
import java.text.Collator;
import java.text.RuleBasedCollator;
import java.util.Comparator;
import java.util.Locale; public class CityComparator implements Comparator<String> { private RuleBasedCollator collator; public CityComparator() { collator = (RuleBasedCollator) Collator.getInstance(Locale.CHINA); } @Override
public int compare(String lhs, String rhs) { lhs = lhs.replace("重庆", "崇庆");
rhs = rhs.replace("重庆", "崇庆");
CollationKey c1 = collator.getCollationKey(lhs);
CollationKey c2 = collator.getCollationKey(rhs); return c1.compareTo(c2);
}
}

CityComparator.java

7、存放一个常量的类

 package com.xqx.SideBarDemo;

 public class Constants {

     public static final String XML_CITIES = "cityarrays.xml";

     // 根据cityarrays.xml文件确定城市列表第一层数量
public static final int CITY_NUMBER = ; public static final String[] CITY_TYPE = new String[] { "#", "A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z" }; }

Constants.xml

8、主MainActivity

 package com.xqx.SideBarDemo;

 import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeMap; public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
/**
* Called when the activity is first created.
*/
private TreeMap<String, List<String>> citiesAll;
// 存放正规带有标志的城市集合
private List<City> cityList;
private CityListAdapter adapter;
private SideBar sideBar;
private TextView dialog_text;
private ListView cityListView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main); cityListView = (ListView) findViewById(R.id.list_view_cities); sideBar = (SideBar) findViewById(R.id.side_bar); dialog_text = (TextView) findViewById(R.id.tv_text_dialog); cityList = new ArrayList<City>(); adapter = new CityListAdapter(this, cityList); cityListView.setAdapter(adapter); cityListView.setOnItemClickListener(this); initData();
initSideBar();
} private void initSideBar() { sideBar.setTextDialog(dialog_text);
// 设置拼音列表的滑动事件,
sideBar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener() {
@Override
public void onTouchingLetterChanged(int position) {
String city_label = Constants.CITY_TYPE[position];
for (int i = ; i < cityList.size(); i++) {
if (cityList.get(i).getCityName().equals(city_label)) {
cityListView.setSelection(i);
dialog_text.setVisibility(View.VISIBLE);
break;
}
if(i == cityList.size() -){
dialog_text.setVisibility(View.INVISIBLE);
}
}
}
}); } private void initData() { //XML解析本地省市数据
AssetManager assets = getResources().getAssets();
try {
InputStream open = assets.open(Constants.XML_CITIES);
//SAX解析
ParseXml parseXml = new ParseXml(open);
citiesAll = parseXml.getCities(); // 存放第一层城市列表名称
List<String> cities = parseXml.getCityList(); // 对第一层城市列表排序
Collections.sort(cities, new CityComparator()); // 添加第一个标签
String cityType = HanziToPinYin.toPinYin(cities.get()) + ""; City city = new City(); city.setCityName(cityType); city.setCityType("label"); cityList.add(city); for (int i = ; i < cities.size(); i++) { String string = cities.get(i); String s = null;
if(string.contains("重庆")){ s = HanziToPinYin.toPinYin("崇庆") + "";
}else{ s = HanziToPinYin.toPinYin(string) + "";
} if(s.equals(cityType)){ city = new City();
city.setCityName(string);
city.setCityType(cityType); cityList.add(city); }else{ // 添加标签
cityType = s;
city = new City();
city.setCityName(cityType);
city.setCityType("label"); cityList.add(city); // 添加城市
city = new City();
city.setCityName(string);
city.setCityType(cityType); cityList.add(city); adapter.notifyDataSetChanged(); }
}
} catch (IOException e) {
e.printStackTrace();
} } // 省市列表项点击事件
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } }

MainActivity.java

最重要的一点:

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

Android项目实战(八):列表右侧边栏拼音展示效果的更多相关文章

  1. (转载)Android项目实战(二十八):Zxing二维码实现及优化

    Android项目实战(二十八):Zxing二维码实现及优化   前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...

  2. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...

  3. Android项目实战(二十九):酒店预定日期选择

    先看需求效果图: 几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果&qu ...

  4. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结   前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: ...

  5. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

  6. Android项目实战(四十九):Andoird 7.0+相机适配

    解决方案类似: Android项目实战(四十):Andoird 7.0+ 安装APK适配 解决方法: 一.在AndroidManifest.xml 文件中添加 四大组件之一的 <provider ...

  7. Android项目实战(三十二):圆角对话框Dialog

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角 ...

  8. (转载)Android项目实战(三十二):圆角对话框Dialog

    Android项目实战(三十二):圆角对话框Dialog   前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...

  9. (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow

    Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow   这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...

随机推荐

  1. win7下IE主页无法修改,IE设置无法保存解决方案

    转自:http://www.myhack58.com/Article/48/65/2012/34411.htm 经测,有效! 现象如下: 1.开启后,首先总是指向http://go.microsoft ...

  2. js数组冒泡排序,快速排序的原理以及实现

    冒泡排序: 随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果. var arr = ...

  3. 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)

    转自 http://blog.csdn.net/zxzxy1988/article/details/8587244 给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素.另外一种更加具 ...

  4. 【原创】C#搭建足球赛事资料库与预测平台(2) 数据库与XCode组件

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录  本篇文章开始将逐步 ...

  5. CentOS6.5菜鸟之旅:安装SUN JDK1.7和Tomcat7

    一.前言   CentOS6.5系统自带Open JDK1.7.1.6和1.5,但OpenJDK部分内容与SUN JDK不兼容,因此打算重新安装SUN JDK1.7来开发. 二.卸载Open JDK ...

  6. Eclipse魔法堂:任务管理器

    一.前言        Eclipse的任务管理器为我们提供一个方便的入口查看工程代办事宜,并定位到对应的代码行继续之前的工作. 二.使用示例        示例1: /** * @Descripti ...

  7. Node之pm2

    最近在项目中使用了Node,在程序部署的时候直接使用命令:node app.js ,这样我们的程序就可以host起来了,但是只要dos窗口关掉之后node就关闭了,这使得我们很不方便,于是乎发现了pm ...

  8. AC自动机 - 多模式串的匹配运用 --- HDU 2896

    病毒侵袭 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=2896 Mean: 略 analyse: AC自动机的运用,多模式串匹配. ...

  9. 统一者管理员指南(Unifier Administration Guide)中文

    统一者管理员指南 Unifier Administration Guide 2014年6月 发布 2014年11月翻译 10.0版本 10.0.1译 关于译者 翻译者QQ:77811970 Email ...

  10. AEAI HR V1.5.1升级说明,开源人力资源管理系统

    本次发版的AEAI HR_v1.5.1版本为AEAI HR_v1.5.0版本的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaihr. 1 升级说明 A ...