希望大家可以留个关注点赞,后续会有更多的技术分享


前言

本次主要介绍Android中底部弹出框的使用,使用两个案例来说明,首先是时间选择器,然后是自定义底部弹出框的选择器,以下来一一说明他们的使用方法。


一、时间选择器

首先这次用到的xml文件如下

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"android:gravity="center"><TextViewandroid:id="@+id/tv_pickerview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:textColor="@color/black"android:textSize="30sp"/><com.google.android.material.button.MaterialButtonandroid:id="@+id/btn"android:layout_width="120dp"android:layout_height="60dp"android:backgroundTint="@color/teal_200"app:cornerRadius="10dp"android:text="获取日期"android:textColor="@color/black"android:textSize="20sp"/><com.google.android.material.button.MaterialButtonandroid:id="@+id/btn_1"android:layout_width="120dp"android:layout_height="60dp"android:backgroundTint="@color/teal_200"app:cornerRadius="10dp"android:text="自定义弹窗"android:textColor="@color/black"android:textSize="20sp"/></LinearLayout>

xml布局文件比较简单,这里不再赘述,需要说的是底部弹窗不需要在布局文件申明,可以直接使   用Java代码来进行实现。

第一步引入相关依赖,这里使用的是Github比较好的一个开源项目

implementation'com.contrarywind:Android-PickerView:4.1.9'

第二步书写相关Java代码,以及相关的设置

                TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {@Overridepublic void onTimeSelect(Date date, View v) {tv_pickerview.setText(getTime(date));}}).setTimeSelectChangeListener(new OnTimeSelectChangeListener() {@Overridepublic void onTimeSelectChanged(Date date) {}}).setType(new boolean[]{true, true, true, true, true, true}).setItemVisibleCount(6).setLineSpacingMultiplier(2.0f).isAlphaGradient(true).build();pvTime.show();private String getTime(Date date) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return format.format(date);}

 然后运行程序,就可以实现了


二、自定义选择器

相关Java代码如下

//自定义底部弹窗btn_1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initData();OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {@Overridepublic void onOptionsSelect(int options1, int options2, int options3, View v) {String date = options1Items.get(options1) + " " + options2 + "时 " + options3 + "分";//在此获取选择到的内容tv_pickerview.setText(date);}}).setTitleText("选择时间").setContentTextSize(16).build();pvOptions.setPicker(options1Items, options2Items, options3Items);pvOptions.show();}});private void initData() {options1Items.clear();//加入第一个列表数据options1Items.add("上午");options1Items.add("下午");List<String> a = new ArrayList<>();List<String> b = new ArrayList<>();List<List<String>> c = new ArrayList<>();//创建最后一个列表数据(分)for (int i = 0; i < 60; i++) {if (i < 10) {a.add("0" + i + "分");} else {a.add(i + "分");}}//创建第二个列表数据(时),同时将最后一个列表数据加入c,加入次数为第二个列表的大小for (int i = 0; i <= 12; i++) {if (i < 10) {b.add("0" + i + "时");} else {b.add(i + "时");}c.add(a);}//将第二个列表数据加入options2Itmes,加入次数为options1Items的大小for (int j = 0; j < options1Items.size(); j++) {options2Items.add(b);}//将第三个列表数据加入options3Items,加入次数为第二个列表数据的长度for (int i = 0; i < b.size(); i++) {options3Items.add(c);}}

 运行结果如下

完整代码如下: 

package com.example.pickerviewtest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.listener.OnTimeSelectChangeListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.bigkoo.pickerview.view.TimePickerView;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class MainActivity extends AppCompatActivity {TextView tv_pickerview;Button btn;Button btn_1;private final List<String> options1Items = new ArrayList<>();private final List<List<String>> options2Items = new ArrayList<>();private final List<List<List<String>>> options3Items = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_pickerview = findViewById(R.id.tv_pickerview);btn = findViewById(R.id.btn);btn_1 = findViewById(R.id.btn_1);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {@Overridepublic void onTimeSelect(Date date, View v) {tv_pickerview.setText(getTime(date));}}).setTimeSelectChangeListener(new OnTimeSelectChangeListener() {@Overridepublic void onTimeSelectChanged(Date date) {}}).setType(new boolean[]{true, true, true, true, true, true}).setItemVisibleCount(6).setLineSpacingMultiplier(2.0f).isAlphaGradient(true).build();pvTime.show();}});//自定义底部弹窗btn_1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initData();OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {@Overridepublic void onOptionsSelect(int options1, int options2, int options3, View v) {String date = options1Items.get(options1) + " " + options2 + "时 " + options3 + "分";//在此获取选择到的内容tv_pickerview.setText(date);}}).setTitleText("选择时间").setContentTextSize(16).build();pvOptions.setPicker(options1Items, options2Items, options3Items);pvOptions.show();}});}private String getTime(Date date) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return format.format(date);}private void initData() {options1Items.clear();//加入第一个列表数据options1Items.add("上午");options1Items.add("下午");List<String> a = new ArrayList<>();List<String> b = new ArrayList<>();List<List<String>> c = new ArrayList<>();//创建最后一个列表数据(分)for (int i = 0; i < 60; i++) {if (i < 10) {a.add("0" + i + "分");} else {a.add(i + "分");}}//创建第二个列表数据(时),同时将最后一个列表数据加入c,加入次数为第二个列表的大小for (int i = 0; i <= 12; i++) {if (i < 10) {b.add("0" + i + "时");} else {b.add(i + "时");}c.add(a);}//将第二个列表数据加入options2Itmes,加入次数为options1Items的大小for (int j = 0; j < options1Items.size(); j++) {options2Items.add(b);}//将第三个列表数据加入options3Items,加入次数为第二个列表数据的长度for (int i = 0; i < b.size(); i++) {options3Items.add(c);}}}

总结

本节介绍这两个底部弹窗的具体实现,使用第三方开源库比较容易实现,在这里不多赘述。

希望大家支持一下哈,点个赞!!!

Android底部弹出选择框PickerView的使用相关推荐

  1. [RN] React Native 自定义 底部 弹出 选择框 实现

    React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...

  2. JSP页面的日期控件可以弹出选择框选择日期

    JSP页面的日期控件可以弹出选择框选择日期 input框的如下 <input type="text" name="starttime" readonly= ...

  3. jQuery日期弹出选择框Datepicker效果

    无论你是一个机票在线预定网站设计师,还是一个工程任务管理者,抑或在你的注册表单上有个生日填写项目:本文即将提到的日历日期选择弹出窗口都将帮助你简化用户操作,提高网站的用户体验和易用性. 教程目标:教会 ...

  4. Android中用两层AlertDialog来进行弹出选择框信息选择

    在Android经常会用到AlertDialog,把内容使用AlertDialog结合列表的形式显示出来,然后我们点击得到点击的信息. 这里可以使用两层的AlertDialog来实现 1:我们现在xm ...

  5. Android开发- 点击按钮旁弹出选择框

    示例: 一.代码部分: 1.弹出框页面布局(layout/pop_mesure_layout.xml) <!--LinearLayout不能设置背景颜色--> <LinearLayo ...

  6. MUI框架div模拟按钮(日期选择器)导致双击才能弹出选择框,移动端Web不支持dblclick双击的问题。

    一些前任项目遗留的问题,mui坑太多,不知道为什么要用div模拟日期选择的button按钮,导致使用时点击2次才能弹出日期选择框,但是他之前的项目都没问题,可以单击弹出,浪费了我大量时间排查原因. ★ ...

  7. appium+python自动化98-非select弹出选择框定位解决

    前言 遇到问题:document.getElementsByClassName(...)[0] is undefined 选择框如果是select标签的,可以直接用select专用的方法去定位点击操作 ...

  8. 当前应用拦截NFC响应,不弹出选择框教程

    从上一篇的NFC支持所类型的卡读取之后,下面要解决的就是NFC的拦截响应,如果这一步没有做,当系统内有多个支持NFC的应用的时候,就会在nfc刷卡的时候弹出多个应用选择,我们需要的场景是,当前应用需要 ...

  9. wpf 点击按钮弹出选择框_WPF-PopupWindow wpf右下角弹出框,通过按钮调用,类似QQ CSharp C#编程 238万源代码下载- www.pudn.com...

    文件名称: WPF-PopupWindow下载 收藏√  [ 5  4  3  2  1 ] 开发工具: C# 文件大小: 90 KB 上传时间: 2013-07-24 下载次数: 19 详细说明:w ...

最新文章

  1. php 命令执行crud_如何使用原始JavaScript执行CRUD操作
  2. 3分钟掌握支持向量机-机器学习面试必备
  3. 尴尬:原来java中有两个 ModelAndView类
  4. 曾陷“数据风暴”危机的赛默飞世尔如何化险为夷的?
  5. 无理由退房退机票,做携程超级会员就是这么任性
  6. 【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)
  7. springcloud -zuul(2-执行流程及源码)
  8. JAVA控制台扑克牌游戏,洗牌,发牌,比较大小
  9. 公钥加密_河海大学陆阳、李继国:不依赖双线性对的带关键字搜索的无证书公钥加密方案构造...
  10. matlab程序 surf算法,SURF算法代码 matlab
  11. 如何提高你的工作效率
  12. 【用积分求不规则面积+抛物线方程】HDU-1071 The area
  13. 虚拟机使用cheese调用摄像头黑屏问题解决
  14. 市场规模、市场份额、市场定位、产品类型以及发展规划-园艺电动工具
  15. 小米平板4刷recovery教程_米板4解锁刷机教程
  16. 软件系统分析模型文档
  17. Angular4 - http
  18. Ubuntu系统重装Ubuntu系统
  19. 2021-06-11警告: 多个不同应用注册了相同服务,请检查
  20. 2018世界杯所有场次记录

热门文章

  1. MySQL中 1305-FUNCTION liangshanhero2.getdate does not exit 问题解决
  2. 2022-11-06 网工进阶(三十五)IP组播协议--PIM-SM工作原理(组播分发树的形成、ASM、SSM)
  3. 关于UI测试的相关及技巧
  4. applovin 面试经验
  5. VC环境下简单的贪吃蛇
  6. 用python玩转数据第一周答案_用Python玩转数据_答案
  7. ES6学习之 - 变量的解构赋值
  8. bzoj2093【POI2010】Frog
  9. 聊聊数据指标体系搭建流程
  10. 四款强大的电脑软件,每一个都是黑科技,请低调收藏!