Android开发选择地区联动弹框
省市区三级联动弹框,很常见的需求
一、思路:
引进的是AndroidPicker这个第三方库
二、效果图:
三、关键代码:
// 联系:893151960
public class MainActivity extends AppCompatActivity {
private TextView tv_select_city;
private String mProvinceVal;
private String mCityVal;
private String mZoneVal;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
tv_select_city = findViewById(R.id.tv_select_city);
tv_select_city.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chooseCity(mContext);
}
});
}
private void chooseCity(Context context) {
ArrayList<Province> list = CityUtil.getInstance().getCityList();
if (list == null || list.size() == 0) {
CityUtil.getInstance().getCityListFromAssets(context,new CommonCallback<ArrayList<Province>>() {
@Override
public void callback(ArrayList<Province> newList) {
if (newList != null) {
showChooseCityDialog(newList);
}
}
});
} else {
showChooseCityDialog(list);
}
}
private void showChooseCityDialog(ArrayList<Province> list) {
String province = mProvinceVal;
String city = mCityVal;
String district = mZoneVal;
showCityChooseDialog(this, list, province, city, district, new AddressPicker.OnAddressPickListener() {
@Override
public void onAddressPicked(Province province, final City city, County county) {
String provinceName = province.getAreaName();
String cityName = city.getAreaName();
String zoneName = county.getAreaName();
mProvinceVal = provinceName;
mCityVal = cityName;
mZoneVal = zoneName;
final String location = mProvinceVal+""+mCityVal+""+mZoneVal;
if (tv_select_city != null) {
tv_select_city.setText(location);
}
}
});
}
/**
* 城市选择
*/
public void showCityChooseDialog(Activity activity, ArrayList<Province> list,
String province, String city, String district, AddressPicker.OnAddressPickListener listener) {
AddressPicker picker = new AddressPicker(activity, list);
picker.setTextColor(0xff323232);
picker.setDividerColor(0xffdcdcdc);
picker.setAnimationStyle(R.style.bottomToTopAnim);
picker.setCancelTextColor(0xff969696);
picker.setSubmitTextColor(0xffff5878);
picker.setTopLineColor(0xfff5f5f5);
picker.setTopBackgroundColor(0xfff5f5f5);
picker.setHeight(dp2px(mContext,250));
picker.setOffset(5);
picker.setHideProvince(false);
picker.setHideCounty(false);
picker.setColumnWeight(3 / 9.0f, 3 / 9.0f, 3 / 9.0f);
if (TextUtils.isEmpty(province)) {
province = "北京市";
}
if (TextUtils.isEmpty(city)) {
city = "北京市";
}
if (TextUtils.isEmpty(district)) {
district = "东城区";
}
picker.setSelectedItem(province, city, district);
picker.setOnAddressPickListener(listener);
picker.show();
}
public int dp2px(Context context, int dpVal) {
return (int) (context.getResources().getDisplayMetrics().density * dpVal + 0.5f);
}
}
四、项目demo源码结构图:
有问题或者需要完整源码的私信我