Giter Club home page Giter Club logo

citypicker's Introduction

CityPicker 城市选择器

在实际的项目中一般情况下都需要使用到省市区三级联动地址选择的功能,有的公司是提供接口获取,有的公司则不是,需要自己实现。一开始,我也深受其扰,每次都是要复制一遍,就想能不能打个包出来,供大伙使用。所以自己就封装了一个,不需要自己添加数据源,直接引用即可。这就是CityPicker城市选择器的由来!

功能点

  1. 支持仿iOS滚轮实现、仿京东样式、一级城市列表、三级城市列表
  2. 支持多种自定义属性来满足你的需求
  3. 简单的几行代码即可实现城市选择器功能
  4. 支持使用自己的数据来实现城市选择器

gradle引用

  1. 在 Project 的 build.gradle 中增加 jitpack 的 maven 地址
	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  1. 在 app 的 build.gradle 中增加我们开源库的引用
	dependencies {
	        implementation 'com.github.crazyandcoder:citypicker:6.0.2'
	}

更新说明

最新版本

V6.0.2版本更新内容(2021.07.09)

  1. 更新数据源,使用最新省市区行政数据
  2. 优化汉字转拼音逻辑,提高解析精度

历史更新记录

历史更新说明

数据来源

2018年12月中华人民共和国县以上行政区划代码

**数据(维基百科)需翻墙

港澳数据(维基百科)需翻墙

效果展示

样式说明 图片效果
样式选择 在这里插入图片描述
仿iOS滚轮实现 8.11x16.19-1080x2050 在这里插入图片描述
自定义数据源 在这里插入图片描述
仿京东样式 在这里插入图片描述 在这里插入图片描述
一级城市列表 在这里插入图片描述 在这里插入图片描述
三级城市列表 在这里插入图片描述 在这里插入图片描述在这里插入图片描述

CityPicker使用方法

一. 仿iOS样式使用方法

  1. 样式一链接-(仿iOS滚轮实现)
  2. 样式一链接-(自定义数据源)

二. 仿京东样式使用方法

样式二链接-(仿京东样式)

三. 一级城市列表使用方法

样式三链接-一级城市列表使用方法

四. 三级城市列表使用方法

样式四链接-三级城市列表使用方法

代码混淆

代码混淆解决方案

专属QQ群,欢迎加入!

QQ群:417846442

其他问题wiki

https://github.com/crazyandcoder/citypicker/wiki

License

Copyright 2016 crazyandcoder

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

码农的小世界

欢迎关注本人公众号,学习更多知识,每天定时更新干货。

citypicker logo

增长趋势

Stargazers over time

citypicker's People

Contributors

crazyandcoder avatar mao720 avatar v200123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

citypicker's Issues

gradle 依赖报错是怎么回事?

compile 'liji.library.dev:citypickerview:0.9.0'

Error:Execution failed for task ':lCB:processDebugManifest'.

Manifest merger failed with multiple errors, see logs

cityPicker.show()方法的时候崩溃

CityPicker cityPicker = new CityPicker.Builder(AuthActivity.this)
.textSize(13)
.title("选择居住地")
.backgroundPop(0xa0000000)
.titleBackgroundColor("#234Dfa")
.titleTextColor("#000000")
.backgroundPop(0xa0000000)
.confirTextColor("#000000")
.cancelTextColor("#000000")
.province("江苏省")
.city("常州市")
.district("天宁区")
.textColor(Color.parseColor("#000000"))
.provinceCyclic(true)
.cityCyclic(true)
.districtCyclic(true)
.visibleItemsCount(7)
.itemPadding(10)
.onlyShowProvinceAndCity(false)
.build();
cityPicker.show();
前面都没问题,执行.show方法的时候崩溃。是不是获取数据失败。

两个建议

首先感谢你做的这个滚动选择器,真的很棒,我直接拿到我项目里就可以用了,非常的感谢!!!

然后提两个小建议:
1,建议自定义titleColor,如下图,如果设置了titleBackgroundColor,那么黑色的title就不美观了
_20161227102005

2,建议增加一个在空白处点击让选择器消失的功能:就是用户点击下图红框区域能让选择器消失
_20161227102151

最后的最后,还是很感谢作者!

弹出菜单问题

目前是只能点击两个按钮让pop消失,点击pop以外,不能让其消失。

请求更新数据

更新数据如下:
安徽--合肥--(蜀山区,瑶海区,庐阳区,高新区,新站区,滨湖新区,包河区,肥东县,肥西县,长丰县)
安徽--六安--去除寿县
安徽--淮南---加上寿县

希望更新!

弹出延迟

每次弹出来的时候,感觉慢半拍,有点延迟。

服务器获取的数据 要怎么 设置上去呢

我们服务器返回的是省市区数据 每一个省市区对应一个id 提交的时候 提交id 我现在的做法就是点击确定的时候 把服务器的数据遍历 和选择的数据做对比 相同 得到对应的省市区的id 但是和ios显示的还是有差别
有没有方法 直接设置呢

能否增加点属性

比如像阴影的颜色,现在这个太深了。。
还有确定取消按钮中间个选择地址的字,最好可以自定义。
还有确定取消背景的颜色,灰色不好看。。 ^_^

区的滚轮,不滚动的话取的是第一个

我用的0.5.0版本
省和市的都没问题
区的话,如果我是有5个区

             1
             2
             3

________4
省 市 5


我设了默认为5,如果我不滚动的话,直接点确定,拿回来的就是1

二级联动

你好,感谢分享.
我想实现一个只要省市的二级联动效果,不知道您这边要怎么设置?

关于弹出背景透明的一个建议

作者你的方案应该是一个activity从上往下进入,除了选择器以外的地方背景都设置成带透明度的。但是这样子给用户的感觉会很生硬,因为用户可以很容易察觉到像我说的这个过程。

建议改善的方案是:
在弹出选择器的时候设置一下window的透明度
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.5f;
getWindow().setAttributes(lp);

然后再在监听方法里恢复window的透明度
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1f;
getWindow().setAttributes(lp);

这样子效果就很自然,但是同时有一个bug,就是监听方法应该是对应按下确定按钮的动作,而用户要是按下取消按钮返回后,整个window就还是透明的。所以想问一下作者,能否提供一下监听取消按钮的接口,这样子就能完善这个小bug了。

请问可以做多国语言吗?

省市区的选择器可以做成多国语言吗?在不同语言下我想要将省市区显示成相对应的语言,例如英语,请问应该如何做呢?

我在使用之余发现了BUG和可以改进之处。写在下面供你参考。也解决了#23的问题。

您好,首先谢谢你分享这个库给我们使用,很方便。
由于写完之后,不知道为什么显示如下错误,导致提交的灰色的,提交不了Issues,所以写到了我的简书里面,可以去简书里面查看。地址》citypicker的改进的建议,和出现的BUG。
错误

#23 的问题》点击pop以外,让其消失。@ZhangTengCR7
也可以通过查看 ,citypicker的改进的建议,和出现的BUG。 解决

请问能否写一个取消按钮的监听事件

是这样的:
我想通过以下这种方式设置背景透明度
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.5f;
getWindow().setAttributes(lp);

然后在确定按钮的监听事件里恢复透明度:
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1f;
getWindow().setAttributes(lp);

但是如果用户一旦按了取消按钮,那么整个界面都还是透明的状态,所以想希望作者能不能提供一个取消按钮的监听事件,我好在里面恢复背景透明度

先感谢一下了!!!!!

多次打开

发现多次打开,关闭,这样循环之后会闪退。也没有报错,很是奇怪。

麻烦加个功能吧

我想知显示省,也知道怎么改动你的代码,但是直接导你的module会在报错,麻烦您提供一个api修改只显示省吧,谢谢了

求助

选中条目的颜色需要改变 请问有什么方法么

数组越界了,我想从一个activity跳转到一个dialogactivity然后显示在下方

FATAL EXCEPTION: main
Process: com.ouju.mlmcms, PID: 30681
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.lljjcoder.city_20170724.CityPickerView.updateAreas(CityPickerView.java:819)
at com.lljjcoder.city_20170724.CityPickerView.updateCities(CityPickerView.java:778)
at com.lljjcoder.city_20170724.CityPickerView.onChanged(CityPickerView.java:852)
at com.lljjcoder.citypickerview.widget.wheel.WheelView.notifyChangingListeners(WheelView.java:296)
at com.lljjcoder.citypickerview.widget.wheel.WheelView.setCurrentItem(WheelView.java:412)
at com.lljjcoder.citypickerview.widget.wheel.WheelView.doScroll(WheelView.java:820)
at com.lljjcoder.citypickerview.widget.wheel.WheelView.access$100(WheelView.java:48)
at com.lljjcoder.citypickerview.widget.wheel.WheelView$1.onScroll(WheelView.java:169)
at com.lljjcoder.citypickerview.widget.wheel.WheelScroller$2.handleMessage(WheelScroller.java:206)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

建议增加json和xml数据可以自己配置的功能

并不总是需要那么多而全的选择的,比如某个商家,它的服务地区有限,那么就只需要在指定的范围内让用户选择地区,并且随着业务的扩张或者其他变更,这些地区并不固定,所以这个数据存在动态变化的特点,并不适合放在assets里面

根据当前的市,更新区WheelView的信息 的updateAreas()方法报空指针 是什么原因?

private void updateAreas() {
int pCurrent = mViewCity.getCurrentItem();
mCurrentCityName = mCitisDatasMap.get(mCurrentProviceName)[pCurrent];
String[] areas = mDistrictDatasMap.get(mCurrentCityName);

    if (areas == null) {
        areas = new String[]{""};
    }

    int districtDefault = -1;
    if (!TextUtils.isEmpty(defaultDistrict) && areas.length > 0) {
        for (int i = 0; i < areas.length; i++) {
            if (areas[i].contains(defaultDistrict)) {
                districtDefault = i;
                break;
            }
        }
    }

    ArrayWheelAdapter districtWheel = new ArrayWheelAdapter<String>(context, areas);
    // 设置可见条目数量
    districtWheel.setTextColor(textColor);
    districtWheel.setTextSize(textSize);
    mViewDistrict.setViewAdapter(districtWheel);
    if (-1 != districtDefault) {
        mViewDistrict.setCurrentItem(districtDefault);
        //获取默认设置的区
        mCurrentDistrictName = defaultDistrict;
    } else {
        mViewDistrict.setCurrentItem(0);
        //获取第一个区名称
        if (mDistrictDatasMap != null) {

///////////////////////////////////////////////////////////////////
////////下面一行报空指针
mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[0];
/////////////////////////////////////////////////////////////////
} else {
mCurrentDistrictName = "";
}
}
districtWheel.setPadding(padding);
// JLogUtils.D("zipcode key: " + mCurrentProviceName + mCurrentCityName + mCurrentDistrictName);
//获取第一个区名称
mCurrentZipCode = mZipcodeDatasMap.get(mCurrentProviceName + mCurrentCityName + mCurrentDistrictName);
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.