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

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

下面看一个使用的示例,这里我们使用本地的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. android手势创建及识别

    使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到的是android.gesture包,具体的例子参考的是S ...

  2. 注意啦!10 个你需要了解的 Linux 网络和监控命令

    下面列出来的10个基础的每个Linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些:hostname, ping, ifconfig, iwconfig, netstat, nslooku ...

  3. 斐波那契堆(二)之 C++的实现

    概要 上一章介绍了斐波那契堆的基本概念,并通过C语言实现了斐波那契堆.本章是斐波那契堆的C++实现. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆的C++实现(完整源码)4.  ...

  4. [OpenCV] Image Processing - Fuzzy Set

    使用模糊技术进行 (灰度变换Grayscale Transform) 和 (空间滤波Spatial Filtering) 模糊集合为处理不严密信息提供了一种形式. 首先,需要将输入量折算为隶属度,这个 ...

  5. 让服务器apache/iis/nginx支持.apk/ipa文件下载

    服务器iis支持.apk文件下载的设置 IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. IIS服务器不能下载.apk文件的解决办法:既然.apk无法 ...

  6. 客户端请求、服务器响应及其HTTP状态码

    一JSP客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的.我们可以查阅HTTP协议来获得更多的信息. 下表列出了浏 ...

  7. 网站跨站点单点登录实现--cookie

    至于什么是单点登录,举个例子,如果你登录了msn messenger,访问hotmail邮件就不用在此登录.一般单点登录都需要有一个独立的登录站点,一般具有独立的域名,专门的进行注册,登录,注销等操作 ...

  8. Hadoop入门进阶课程13--Chukwa介绍与安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  9. 使用Html5+C#+微信 开发移动端游戏详细教程 :(二)准备工作&开发环境

    C#开发环境:VS2013; H5开发环境:WebStorm; 数据库:mysql+navicat管理工具: 操作系统:win7: 调试:chrome浏览器 如果想在微信端上线运营游戏请做好以下准备工 ...

  10. 团队项目2.0软件改进分析MathAPP

    软件改进分析 在此基础上,进行软件的改进. 首先,我们把这个软件理解成一个投入市场的.帮助小朋友进行算术运算练习的APP. 从质量保证的角度,有哪些需要改进的BUG? 从用户的角度(把自己当成小学生或 ...