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


前言

本次主要介绍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. Webpack vs Rollup
  2. NHibernate应用二:第一个NHibernate程序
  3. Spring boot使用Rabbitmq注解及消息序列化
  4. PendingIntent传值接收时为null
  5. linux下php的安装,Linux下PHP安装
  6. c语言mysql自动重连接_c++操作mysql数据库
  7. MySQL/MariaDB的response time插件
  8. 我如何使用回归分析通过Scikit-Learn和Statsmodels分析预期寿命
  9. Python面向对象介绍
  10. #化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 Tomcat
  11. java指定sql生成xml_通过generate解析SQL日志生成xml进行SQL回放
  12. php格式化输出字_PHP 输出格式化字符串
  13. python编程100例-一,python编程100例
  14. yolo-v5连接手机摄像头实时检测的步骤
  15. 网络安全审核(ISO 19011)
  16. Python 解析风云四A卫星L1级别数据以及绘制卫星云图
  17. 简单沟通,远离纸质繁琐!灵活简单的在线表单制作工具
  18. 商简智能学术成果|基于深度强化学习的联想电脑制造调度(Lenovo Schedules Laptop Manufacturing Using Deep Reinforcement Learning)
  19. KCL v0.4.4 发布 - 自定义 YAML Manifests 输出以及 Python SDK
  20. 在.NET中使用正则表达式对太平洋产品参数进行分析!

热门文章

  1. 如何阅读Python代码?
  2. signature=95eea087473d092a96a2e8a1766b9911,黑马旅游网初始项目文件!WEB阶段
  3. 1.AVL树:左右旋-bite
  4. OpenCV的imwrite或者imshow全白
  5. 求教:使用conga集群的时候出现以下问题
  6. SSM健身房管理系统的设计与实现毕业设计-附源码191656
  7. python3爬取知乎某话题下的若干个问题及其回答
  8. Python和ArcGIS自动化制图完全指南(三):分配模板大小
  9. 一周心结总,拨开云雾见青天
  10. Maven - Error:java: Annotation processing is not supported for module cycles. Please ensure that all