Android-PickerView
是一款仿 iOS
的 PickerView
控件,带有 3D 圆弧效果,并封装了时间选择和选项选择这两种选择器。
目前最新版本是 4.1.9。 GitHub:https://github.com/Bigkoo/Android-PickerView
功能- 支持三级联动
- 设置是否联动
- 设置循环模式
- 支持自定义布局。
- 支持 item 的分隔线设置。
- 支持 item 间距设置。
- 时间选择器支持起始和终止日期设定。
- 支持“年,月,日,时,分,秒”,“省,市,区”等选项的单位(label)显示、隐藏和自定义。
- 支持自定义文字、颜色、文字大小等属性
- Item 的文字长度过长时,文字会自适应缩放到Item的长度,避免显示不完全的问题
- 支持 Dialog 模式。
- 支持自定义设置容器。
- 实时回调。
1. 在 app/build.gradle
中添加依赖
implementation 'com.contrarywind:Android-PickerView:4.1.9'
三、使用
TimePickerView 的基本使用
1. 效果图
2. 代码
TimePickerView pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
tv_pickerview.setText(getTime(date));
}
})
.setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
@Override
public void onTimeSelectChanged(Date date) {
}
})
.setType(new boolean[]{true, true, true, true, true, true})
.setItemVisibleCount(6)
.setLineSpacingMultiplier(2.0f)
.isAlphaGradient(true)
.build();
pvTime.show()
----------------------------------------分隔线-----------------------------------------
// getTime()方法
private String getTime(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(date);
OptionsPickerView 的基本使用
首先:创建数据项,每个数据项为一个列表,每多定义一个项就要多嵌套一层
private final List options1Items = new ArrayList();
private final List options2Items = new ArrayList();
private final List options3Items = new ArrayList();
添加数据(重点)
private void initData() {
//加入第一个列表数据
options1Items.add(getResources().getString(R.string.morning));
options1Items.add(getResources().getString(R.string.afternoon));
List a = new ArrayList();
List b = new ArrayList();
List c = new ArrayList();
//创建最后一个列表数据(分)
for (int i = 0; i
InstallActivity.java
public class InstalledActivity extends BaseActivity {
@BindView(R.id.title_bar)
TitleBar mTitleBar;
private List options1Items = new ArrayList();
private ArrayList options2Items = new ArrayList();
private ArrayList options3Items = new ArrayList();
private Thread thread;
private static final int MSG_LOAD_DATA = 0x0001;
private static final int MSG_LOAD_SUCCESS = 0x0002;
private static final int MSG_LOAD_FAILED = 0x0003;
@BindView(R.id.tv_new_address)
TextView mAddress;
private static boolean isLoaded = false;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_LOAD_DATA:
if (thread == null) {//如果已创建就不再重新创建子线程了
thread = new Thread(new Runnable() {
@Override
public void run() {
// 子线程中解析省市区数据
initJsonData();
}
});
thread.start();
}
break;
case MSG_LOAD_SUCCESS:
isLoaded = true;
break;
case MSG_LOAD_FAILED:
ToastUtils.showToast(InstalledActivity.this,"解析失败!");
break;
}
}
};
@Override
protected int getLayoutId() {
return R.layout.activity_installed;
}
@Override
protected void initView() {
mHandler.sendEmptyMessage(MSG_LOAD_DATA);
mTitleBar.setOnTitleBarListener(new OnTitleBarListener() {
@Override
public void onLeftClick(View view) {
finish();
}
@Override
public void onTitleClick(View view) {
}
@Override
public void onRightClick(View view) {
}
});
}
@OnClick({R.id.rl_product,R.id.rl_new_address})
public void onClicked(View view) {
switch (view.getId()) {
case R.id.rl_product :
readyGo(ProductActivity.class);
break;
case R.id.rl_new_address :
showPickerView();
break;
}
}
private void showPickerView() {
OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//返回的分别是三个级别的选中位置
String opt1tx = options1Items.size() > 0 ?
options1Items.get(options1).getPickerViewText() : "";
String opt2tx = options2Items.size() > 0
&& options2Items.get(options1).size() > 0 ?
options2Items.get(options1).get(options2) : "";
String opt3tx = options2Items.size() > 0
&& options3Items.get(options1).size() > 0
&& options3Items.get(options1).get(options2).size() > 0 ?
options3Items.get(options1).get(options2).get(options3) : "";
String tx = opt1tx + "-" + opt2tx + "-" + opt3tx;
mAddress.setText(tx);
}
})
.setTitleText("城市选择")
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
pvOptions.show();
}
private void initJsonData() {//解析数据
/**
* 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
* 关键逻辑在于循环体
*
* */
String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
ArrayList jsonBean = parseData(JsonData);//用Gson 转成实体
/**
* 添加省份数据
*
* 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
* PickerView会通过getPickerViewText方法获取字符串显示出来。
*/
options1Items = jsonBean;
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?