类似于京东的地址选择器
近日有媒体曝光了“羊毛党”的一个分类——运险客。运险客在淘宝平台购买了1件普通商品,外加5毛的运费险,卖家发货后,这个保险单子就生效了,商品到货后,运险客利用“7天无理由退货”的规则进行退货。于是保险公司将会掏出10元的运费给买家,这个10元差不多就是快递费,但是运险客和淘宝商家一样,他们的快递费也只有4-6元,他们就“赚取”了差价。
本篇来自 BlinCheng 的投稿,分享了一个类似京东地址选择器的控件,希望对大家有所帮助!
BlinCheng 的博客地址:
http://blog.csdn.net/qq_25867141
最近东西写的挺多的,这不又要弄一个类似于京东的地址选择器,然后刚开始我是不愿意自己去写的,这东西就是费时间,然后大致浏览了一会,发现真没有符合公司需求的,好吧,那就自己开撸。先看看效果图,不知道是不是大家想要的。然后京东是用在一个从下而上的弹窗里面的。
主要功能
1. 大致分为三个模块:顶部的Tab模块,中间的移动指示器模块,还有就是下面的list了。
2. 支持点击数据后自动跳到下一个Tab
3. 支持点击Tab后回到当前Tab的状态
4. 还有就是可以随意设置你想要的。
还是来说说怎么用吧。
集成导入(gradle)
1. Add the JitPack repository to your build file .Add it in your root build.gradle at the end of repositories:
2. Add the dependency
其余继承方式看:
https://jitpack.io/#Blincheng/AddressSelector
XML直接使用
Java中使用
AddressSelector addressSelector = (AddressSelector) findViewById(R.id.address);
设置Tab数量
addressSelector.setTabAmount(3);
也可以不设置,默认3级。
设置数据列表的Itme回调OnItemClickListener
设置Tab的点击事件回调OnTabSelectedListener
注意,一般来说这两个点击事件都要设置,并且数据的处理一定要搞清楚。
其他的一些属性的设置
现在我们开始说说实现方式吧,从需求上面来讲,我们需要写出来的东西具有以下几点:
有指示器(Tab)
有一条会动的横线
下方有个列表
上方的Tab和下方的列表都是可点击的。
其实,从功能角度实现上来讲,其实我们用 google 提供的现成的控件堆一下,其实也可以写出来。比如举个例子啊,上面的 tab 就用 google 自己的 TabLayout,下方的列表就用 RecyclerView,然后把数据什么的绑定以下,点击事件做一下,把异常处理掉,也能出来,就是说不方便二次使用。
然后实现思路:我这边直接继承 LinearLayout,然后一个一个往里面 addView 就好,简单粗暴。
Tab 的话可以继承 TextView,Line 的话继承 View 应该也行,下面的列表就直接用 RecyclerView。好了,看看如何实现吧。
Tab的实现:
先thinking,我们的 Tab 需要有文字,选中状态,然后应该还要一个 index。看代码:
很简单,就是重写一下 setText,然后根据选中的状态来设置对应的颜色即可。
实现Line
本来想了一下直接用 View 也能实现,但是后来想想既然要移动,有点小动画,外层既然用了线性布局,这边的横线还有长度的问题,所以也直接用横向的线性布局了。如下:
其实和 Tab 差不多,唯一不同的是需要之前选中的 oldIndex,因为毕竟有个动画嘛。
看看这个接口,在设置 index 的同时,把移动的动画也一起做了。
AddressSelectord 实现
因为之前就想好用继承 LinearLayout 的形式,所以也简单粗暴,直接一层一层去 addView 是吧,需要注意的是,这边有个这样的方法:
看出来了吧,其实就是去创建需要的 Tab,然后把点击事件等其他参数都设置好了,主要用来 AddressSelectord 内部来创建 Tab 时候用。然后必要的属性还是要提供接口设置的:
需要设置当前 tab 的数量,然后看这边又调用了 init()方法,也就是说其实这个时候 AddressSelectord 又重置了。所以在 init()方法 中有一个 removeAllViews() 需要调用。
下边儿列表的实现RecyclerView
然后一开始我就在想要不要提供什么 Adapter 可以让大家自己来绑定数据,然后又想了想,为了简单方便大家使用,所以我觉得还是暂时不写 Adapter 了。但是想想每个 item 的 Entity 不应该是死的,毕竟大家的项目还是不一样的,所以我最终采取了一种方式去实现。
public interface CityInterface { String getCityName(); }
就是这个接口了,大家在设置数据源的时候,尽管设置自己的,然后唯一需要注意的是大家的 Item 需要去实现这个接口,返回我列表需要展示的文本,我用来展示列表的内容。只能要求大家做这么一点点了。所以在设置数据的时候也要求大家这么做了。
不然就简单粗暴抛出 throw new RuntimeException("AddressSelector cities must implements CityInterface"
这样就好说了,我在 setOnItemClickListener 可以直接返回 CityInterface,就解决一切问题了。
最后就是把要开放的接口开放一下,测测调调~
然后,其实也是很简单的,就是练练手,做一些让自己和大家都觉得方便可行的事情。如果有什么地方有问题,或者有更好的建议真的很欢迎大家多多提出建议和意见,还有一句话就是说没事不要闲着,要多动动。
项目地址:
https://github.com/Blincheng/AddressSelector
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:
类似于京东的地址选择器相关推荐
- android开发地址选择器,Android地址选择器 类似于京东的地址选择
简介 最近东西写的挺多的,这不又要弄一个类似于京东的地址选择器,然后刚开始我是不愿意自己去写的,这东西真的是浪费时间.但是下班后回到家找了一圈没找到一个合适的,好吧,那我就自己来封装一个呗,反正生命在 ...
- android 京东地址,MUI仿京东App地址选择器
才学JS不久,刚好项目需要一个京东地址选择器,所以尝试着写了一个,dom获取较为复杂,纯粹使用自己了解到的东西 依赖 //css是用rem写的 //mui提供的城市js HTML 请选择 请选择 请选 ...
- Android进阶之路 - 仿京东地址选择器使用指南
因为现在项目的地址选择器比较low,自己又比较懒,所以就找到了仿京东的地址选择器,观赏几篇博文之后,发现总是被半路卡死,很难一路走到底,所以在github找到了项目地址,但是作者的功能简介又介绍的不是 ...
- 一次地址选择器的实践
前言 我们知道,地址选择器是一个通用组件,网上的开源项目也有很多.那么为什么还会有这篇文章呢?因为我在调研过程中发现,虽然都是地址选择器,但是实现的方式却各不相同.以下是调研地址选择器的一些总结和思考 ...
- Android进阶之路 - Citypicker 五分钟内快速实现地址选择器
从早期的时候就比较喜欢拉框架直接用,所以以前记录了很多 关于 CityPicker 框架,我用的时候还是2017年,但是这几年(2022)改变了很多,扩展性也很强,如果要了解最新使用的话,最好还是去 ...
- MUI 地址选择器 - picker使用
MUI 地址选择器 - picker使用 很多安卓原生的地址选择器中,选择器基本是实时滚动的. 就像腾讯QQ应用的地址选择器一样! 效果截图如下: 代码如下: <!DOCTYPE html> ...
- 支付宝小程序组件库开发之省市区三级地址选择器组件
支付宝小程序开发文档中并没有提供明确的省市区选择器,不少项目还是有地址的填写需求,根据支付宝小程序现有提供的组件以及api,完全是可以实现填写地址的需求,比如分别获取省市区,通过地图来获取地址等,但是 ...
- php地址选择插件,微信小程序中关于三级联动地址选择器的实例分享
本文介绍了微信小程序三级联动地址选择器的实例代码,分享给大家,有需要的可以一起了解一下 在一些电商类的小程序中,地址选择这个功能一般是必备的,一般的收货信息都需要有一个能选择省市县的控件,当然也有些人 ...
- Android地址选择器的实现
最近在做地址管理的功能,新建地址的时候,需要根据后台提供的省市区的数据,让用户进行地址的选择,最近项目比较赶,本来想网上找一个的,可是找了很久都没找到我想要的效果,所以就根据后台提供的数据,弄了一个. ...
最新文章
- mysql 单表卡死
- 开发者狂喜!微信小程序文档和工具放出
- Get请求参数中文乱码问题整理
- 山山的数学(困难版)
- Windows安装zookeeper和kafka
- Ti杯电子竞赛前期准备工作
- 在ourdev上看的一个帖子
- 【转】常用的版本控制软件
- Android日常开发问题总结:这些问题火候不够,随时变成删库跑路!
- 大连英语培训商务英语百家外语当今社会学习商务英语的重要性
- 方倍工作室微信相关代码下载方法
- Springboot就业招聘信息系统x8y1g计算机毕业设计-课程设计-期末作业-毕设程序代做
- 洛谷P4942 小凯的数字
- WebRequest、WebResponse的使用示例
- 分享一下我的一些学习方法
- C-means聚类算法实战 — 地表植被分类/数字聚类
- 西门子哪款plc支持c语言,西门子PLC三种语言的区别
- phpexcel的读取和导出
- 孙青椒排版八法 和 黄金分割0.618法则和构图法
- 计算机网络国培总结,国培数学研修总结
热门文章
- 降本增效——券商们为什么必须布局小程序?
- java计算机毕业设计的流浪动物救助平台的设计与实现源程序+mysql+系统+lw文档+远程调试
- grains和pillar
- 腾讯云服务器云硬盘有哪些类型可供选择?
- python批量图像处理_python数字图像处理(6):图像的批量处理
- Python之登录淘宝
- CRM管理系统如何选型?分别有什么作用?
- CSS基本知识点——带你走进CSS的新世界
- 鼎捷软件:“数字化转型”喧嚣下,企业管理者们需要冷思考
- 职场工具:SMART、PEST、PDCA、SWOT、四象限、二八法则