Android WheelView实现PackView风格三级城市联动菜单

Android 里的 Wheel Control 的三级城市选择菜单,挺适合做那种底部弹出的省市区联动。UI 风格有点像 iPhone 的 PackView,滑动选择那种,手感还不错。这个控件主要靠的是三个WheelView组合搞定联动——省、城市、区县各一个。只要把数据源搞清楚,再加上监听器联动,逻辑其实挺顺的。

布局方面,直接在 XML 里放上三个WheelView,按比例分一下宽度就行。颜色、文字样式这些也能自己调,UI 定制空间还挺大的。

数据初始化那块,可以先填好省份,等你选择了省份,再动态更新城市和区县。省市区这套联动,比较依赖setOnItemSelectedListener()setAdapter(),事件监听要写清楚,不然切换的时候容易出 Bug。

说白了,就是每一级选中之后,要根据这个值更新下一级的数据。比如选了“广东”,城市 WheelView 就要变成“广州、深圳、佛山”这些;你选了“广州”,区县就切成“天河、越秀”那些。

核心方法无非几个:setCurrentItem()让 Wheel 滑到指定项,setAdapter()绑数据,setOnItemSelectedListener()联动。数据你可以本地写死,也可以从服务器拉,前提是格式要清晰。

项目源码在一个叫PopTest的包里,里面布局、逻辑都有,导进 Android Studio 就能跑。如果你项目里要做城市选择,或者那种多级联动的弹出菜单,这套方案蛮适合用的。

还有,如果你想参考不同做法,可以看看这几个文章:

如果你在做一个带城市选择的 APP,比如注册、地址填写、物流下单这些模块,搞个像 PackView 那样滑动选择的底部弹窗,还挺加分的。

rar
PopTest.rar 预估大小:89个文件
folder
PopTest 文件夹
file
.project 843B
file
project.properties 563B
folder
src 文件夹
folder
kankan 文件夹
folder
wheel 文件夹
folder
widget 文件夹
file
WheelRecycle.java 3KB
file
WheelView.java 23KB
folder
adapters 文件夹
file
AbstractWheelAdapter.java 2KB
file
AbstractWheelTextAdapter.java 8KB
file
AdapterWheel.java 2KB
file
ArrayWheelAdapter.java 2KB
file
WheelViewAdapter.java 2KB
file
NumericWheelAdapter.java 2KB
file
ItemsRange.java 2KB
file
OnWheelScrollListener.java 1KB
file
OnWheelClickedListener.java 1KB
file
WheelAdapter.java 1KB
file
WheelScroller.java 7KB
file
OnWheelChangedListener.java 1KB
folder
com 文件夹
folder
example 文件夹
folder
poptest 文件夹
file
MainActivity.java 8KB
file
AddressData.java 83KB
file
AndroidManifest.xml 878B
folder
res 文件夹
folder
drawable-ldpi 文件夹
folder
drawable-hdpi 文件夹
file
ic_launcher.png 9KB
folder
values-v11 文件夹
file
styles.xml 332B
folder
menu 文件夹
file
main.xml 261B
folder
drawable 文件夹
file
wheel_val.xml 1KB
file
layout_bg.xml 973B
file
wheel_bg.xml 1KB
folder
drawable-mdpi 文件夹
file
ic_launcher.png 5KB
folder
layout 文件夹
file
cities_layout.xml 2KB
file
country_layout.xml 555B
file
activity_main.xml 1KB
folder
values-sw600dp 文件夹
file
dimens.xml 201B
folder
drawable-xhdpi 文件夹
file
ic_launcher.png 14KB
folder
values 文件夹
file
strings.xml 222B
file
styles.xml 695B
file
dimens.xml 218B
folder
values-sw720dp-land 文件夹
file
dimens.xml 275B
folder
values-v14 文件夹
file
styles.xml 389B
folder
assets 文件夹
folder
gen 文件夹
folder
com 文件夹
folder
example 文件夹
folder
poptest 文件夹
file
BuildConfig.java 161B
file
R.java 3KB
folder
libs 文件夹
file
android-support-v4.jar 384KB
file
.classpath 364B
file
proguard-project.txt 781B
folder
bin 文件夹
file
resources.ap_ 36KB
file
PopTest.apk 248KB
folder
classes 文件夹
folder
kankan 文件夹
folder
wheel 文件夹
folder
widget 文件夹
file
WheelRecycle.class 3KB
file
WheelScroller$2.class 2KB
file
WheelView$2.class 714B
file
OnWheelClickedListener.class 207B
folder
adapters 文件夹
file
AbstractWheelAdapter.class 2KB
file
AdapterWheel.class 1KB
file
WheelViewAdapter.class 458B
file
ArrayWheelAdapter.class 1KB
file
AbstractWheelTextAdapter.class 5KB
file
NumericWheelAdapter.class 2KB
file
WheelView.class 16KB
file
OnWheelScrollListener.class 239B
file
OnWheelChangedListener.class 204B
file
WheelAdapter.class 243B
file
WheelScroller.class 4KB
file
WheelScroller$ScrollingListener.class 328B
file
WheelScroller$1.class 1KB
file
WheelView$1.class 2KB
file
ItemsRange.class 873B
folder
com 文件夹
folder
example 文件夹
folder
poptest 文件夹
file
MainActivity$7.class 2KB
file
R$layout.class 481B
file
R$style.class 434B
file
R$dimen.class 464B
file
MainActivity$4.class 1KB
file
BuildConfig.class 347B
file
R$drawable.class 508B
file
R$attr.class 343B
file
MainActivity$6.class 2KB
file
MainActivity$5.class 2KB
file
R$id.class 689B
file
MainActivity$2.class 1KB
file
R.class 683B
file
MainActivity$CountryAdapter.class 1KB
file
R$string.class 475B
file
MainActivity$1.class 1KB
file
MainActivity$3.class 2KB
file
R$menu.class 391B
file
MainActivity.class 6KB
file
AddressData.class 122KB
file
AndroidManifest.xml 878B
folder
dexedLibs 文件夹
file
android-support-v4-88dba250091109a2d3a32359cedc1479.jar 148KB
file
annotations-cc42cc7410bc4eedfb33cdc7243ed47e.jar 943B
folder
res 文件夹
folder
drawable-hdpi 文件夹
file
ic_launcher.png 9KB
folder
drawable-mdpi 文件夹
file
ic_launcher.png 5KB
folder
drawable-xhdpi 文件夹
file
ic_launcher.png 14KB
file
classes.dex 683KB
...
rar 文件大小:1.1MB