欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中使用开源框架Citypickerview实现省市区三级联动选择

程序员文章站 2023-12-01 12:59:04
1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯...

1.概述

记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很简单,但是代码量相对大了些。偶然期间发现了另外一个开源组件,也就是今天要介绍的citypickerview。

github地址:

2. 实现效果

下面给大家演示下实现效果:

Android中使用开源框架Citypickerview实现省市区三级联动选择

3.   实现方法

(1)添加依赖

dependencies {
  ...
  compile 'liji.library.dev:citypickerview:0.7.0'
}

(2)代码实现

这里就不在介绍布局文件了,直接演示实现代码:

package com.mly.panhouye.anchong.activity;
import android.content.context;
import android.content.intent;
import android.graphics.color;
import android.os.bundle;
import android.text.textutils;
import android.view.view;
import android.view.inputmethod.inputmethodmanager;
import android.widget.edittext;
import android.widget.textview;
import com.lljjcoder.citypickerview.widget.citypicker;
import com.mly.panhouye.anchong.r;
import com.mly.panhouye.anchong.entity.anchong_address;
import com.mly.panhouye.anchong.view.titlebarview;
import static com.mly.panhouye.anchong.utils.constant.newaddress;
public class newaddressactivity extends baseactivity {
  titlebarview address_manager_titlebar;
  edittext new_address_name,new_address_phone,new_address_address;
  anchong_address newaddress = new anchong_address();
  textview new_address_area;
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_new_address);
    initview();
  }
  //texview的点击事件
  public void choosearea(view view) {
    //判断输入法的隐藏状态
    inputmethodmanager imm = (inputmethodmanager) getsystemservice(context.input_method_service);
    if (imm.isactive()) {
      imm.hidesoftinputfromwindow(view.getwindowtoken(),
          inputmethodmanager.hide_not_always);
      selectaddress();//调用citypicker选取区域
    }
  }
  private void selectaddress() {
    citypicker citypicker = new citypicker.builder(newaddressactivity.this)
        .textsize(14)
        .title("地址选择")
        .titlebackgroundcolor("#ffffff")
        .titletextcolor("#696969")
        .confirtextcolor("#696969")
        .canceltextcolor("#696969")
        .province("江苏省")
        .city("常州市")
        .district("天宁区")
        .textcolor(color.parsecolor("#000000"))
        .provincecyclic(true)
        .citycyclic(false)
        .districtcyclic(false)
        .visibleitemscount(7)
        .itempadding(10)
        .onlyshowprovinceandcity(false)
        .build();
    citypicker.show();
    //监听方法,获取选择结果
    citypicker.setoncityitemclicklistener(new citypicker.oncityitemclicklistener() {
      @override
      public void onselected(string... cityselected) {
        //省份
        string province = cityselected[0];
        //城市
        string city = cityselected[1];
        //区县(如果设定了两级联动,那么该项返回空)
        string district = cityselected[2];
        //邮编
        string code = cityselected[3];
        //为textview赋值
        new_address_area.settext(province.trim() + "-" + city.trim() + "-" + district.trim());
      }
    });
  }
  @override
  protected void initview() {
    new_address_name = (edittext) findviewbyid(r.id.new_address_name);
    new_address_phone = (edittext) findviewbyid(r.id.new_address_phone);
    new_address_address = (edittext) findviewbyid(r.id.new_address_address);
    new_address_area = (textview) findviewbyid(r.id.new_address_area);
  }
}

4.使用说明

摘自github地址:

结果返回

只需传入context便可获取选择的省市区域的信息,结果返回四项,可根据自己的实际需求进行选择。

  1. cityselected[0]:表示:省份信息
  2. cityselected[1]:表示:城市信息
  3. cityselected[2]:表示:区县信息
  4. cityselected[3]:表示:邮编信息

方法说明

  1. textsize(滚轮文字的大小,int 类型,默认为18)
  2. title(选择器标题,默认为“选择地区”)
  3. backgroundpop(背景,默认为半透明,16位进制颜色代码,带alpha值,如0xa0ffffff)
  4. titlebackgroundcolor(标题栏背景,默认为灰色,#c7c7c7)
  5. confirtextcolor(确认按钮字体颜色,默认为系统的colorprimary颜色值)
  6. canceltextcolor(取消按钮字体颜色,默认为系统的colorprimary颜色值)
  7. province(默认的显示省份,显示选择器后直接定位的item位置)
  8. city(默认的显示市,显示选择器后直接定位的item位置)
  9. district(默认的显示区,显示选择器后直接定位的item位置)
  10. textcolor(滚轮文字的颜色 ,int 类型,默认为0xff585858)
  11. provincecyclic(省份的滚轮是否循环滚动)
  12. citycyclic(市的滚轮是否循环滚动)
  13. districtcyclic(区的滚轮是否循环滚动)
  14. visibleitemscount(滚轮显示的item个数,int 类型,默认为5个)
  15. itempadding(滚轮item间距,默认为5dp)
  16. onlyshowprovinceandcity(boolean flag)(是否只显示省份和市的两级联动,去掉区或者县)
  17. titletextcolor(标题文字颜色,默认为 #e9e9e9)

以上所述是小编给大家介绍的android中使用开源框架citypickerview实现省市区三级联动选择,希望对大家有所帮助