iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >安卓(Android)实现选择时间功能
  • 474
分享到

安卓(Android)实现选择时间功能

选择Android 2022-06-06 07:06:00 474人浏览 八月长安
摘要

前言 由于大部分Android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式各样的日期格式也要

前言

由于大部分Android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式各样的日期格式也要花好大一番功夫,下面看看如何实现android选择时间的功能。

android 6.0 中的运行效果


TimePickerDialog和DatePickerDialog介绍

系统封装好了两个类可以供我们直接调用,

TimepickerDialog
用于选择时间,
DatePickerDialog
用于选择日期。

TimePikckerDialog的构造方法


public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)

     1、第一个参数接受一个context信息

     2、第二个参数为当选择时间完成后执行的回调接口

     3、第三个参数和第四个参数为初始化的时间

     4、第四个参数选择true代表24小时制,false代表12小时制

DatePickerDialog构造方法


public DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)

      1、第一个参数接受context信息

      2、第二个参数为日期选择完成后的回掉接口

      3、最后三个参数分别为初始化的年月日

可以看出两者的构造方法基本相差不多,由于两者都是继承自

AlertDialog
,所以得到两者对象后只要调用它们的
show()
方法即可将选择框弹出。

具体实现

有两种实现方式,一种是直接在

Activity
中使用,还有一种是通过
FragmentDialog
使用。

直接在Activity中使用比较简单,不过代码会比较乱,通过FragmentDialog管理的使用方式会比较优雅,而且便于管理。

直接在Activity中使用

布局文件,里面就一个TextView用于显示所选时间


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.testdemo.TestActivity">
  <TextView
    android:layout_centerInParent="true"
    android:textSize="20sp"
    android:id="@+id/time_text"
    android:text="点此选择时间"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</RelativeLayout>

Activity文件:


public class TestActivity extends AppCompatActivity {
  private TextView timeText;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    timeText = (TextView) findViewById(R.id.time_text);
    //为TextView设置点击事件
    timeText.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //将timeText传入用于显示所选择的时间
        showDialogPick((TextView) v);
      }
    });
  }
  //将两个选择时间的dialog放在该函数中
  private void showDialogPick(final TextView timeText) {
    final StringBuffer time = new StringBuffer();
    //获取Calendar对象,用于获取当前时间
    final Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);
    //实例化TimePickerDialog对象
    final TimePickerDialog timePickerDialog = new TimePickerDialog(TestActivity.this, new TimePickerDialog.OnTimeSetListener() {
      //选择完时间后会调用该回调函数
      @Override
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        time.append(" " + hourOfDay + ":" + minute);
        //设置TextView显示最终选择的时间
        timeText.setText(time);
      }
    }, hour, minute, true);
    //实例化DatePickerDialog对象
    DatePickerDialog datePickerDialog = new DatePickerDialog(TestActivity.this, new DatePickerDialog.OnDateSetListener() {
      //选择完日期后会调用该回调函数
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //因为monthOfYear会比实际月份少一月所以这边要加1
        time.append(year + "-" + (monthOfYear+1) + "-" + dayOfMonth);
        //选择完日期后弹出选择时间对话框
        timePickerDialog.show();
      }
    }, year, month, day);
    //弹出选择日期对话框
    datePickerDialog.show();
  }
}

到此,点击运行就可以看效果了:)

通过FragmentDialog使用

为什么要用DialogFragment

      1、用DialogFragment管理对话框是官方推介的使用方式。

       2、使用DialogFragment管理对话框也方便代码的重用。

通过FragmentDialog实现步骤

DatePickerFragment类:


public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
  private String date;
  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {
    //得到Calendar类实例,用于获取当前时间
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    //返回DatePickerDialog对象
    //因为实现了OnDateSetListener接口,所以第二个参数直接传入this
    return new DatePickerDialog(getActivity(), this, year, month, day);
  }
  //实现OnDateSetListener接口的onDateSet()方法
  @Override
  public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //这样子写就将选择时间的fragment和选择日期的fragment完全绑定在一起
    //使用的时候只需直接调用DatePickerFragment的show()方法
    //即可选择完日期后选择时间
    TimePickerFragment timePicker = new TimePickerFragment();
    timePicker.show(getFragmentManager(), "time_picker");
    //将用户选择的日期传到TimePickerFragment
    date = year + "年" + (monthOfYear+1) + "月" + dayOfMonth + "日";
    timePicker.setTime(date);
  }
}

TimePickerFragment类:


//实现OnTimeSetListener接口
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{
  private String time = "";
  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {
    //新建日历类用于获取当前时间
    Calendar calendar = Calendar.getInstance();
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);
    //返回TimePickerDialog对象
    //因为实现了OnTimeSetListener接口,所以第二个参数直接传入this
    return new TimePickerDialog(getActivity(), this, hour, minute, true);
  }
  //实现OnTimeSetListener的onTimeSet方法
  @Override
  public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    //判断activity是否是DataCallBack的一个实例
    if(getActivity() instanceof DataCallBack){
      //将activity强转为DataCallBack
      DataCallBack dataCallBack = (DataCallBack) getActivity();
      time = time + hourOfDay + "点" + minute + "分";
      //调用activity的getData方法将数据传回activity显示
      dataCallBack.getData(time);
    }
  }
  public void setTime(String date){
    time += date;
  }
}

Activity的布局文件,只有一个TextView用于显示时间


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.testdemo.TestActivityActivity">
  <TextView
    android:id="@+id/time_text"
    android:layout_centerInParent="true"
    android:text="点此选择时间"
    android:textSize="20sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</RelativeLayout>

Activity文件:


//实现DataCallBack接口,实现与Fragment的通信
public class TestActivityActivity extends AppCompatActivity implements DataCallBack{
  TextView timeText;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test2);
    timeText = (TextView) findViewById(R.id.time_text);
    //为timeText设置点击事件
    timeText.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //实例化对象
        DatePickerFragment datePickerFragment = new DatePickerFragment();
        //调用show方法弹出对话框
        // 第一个参数为FragmentManager对象
        // 第二个为调用该方法的fragment的标签
        datePickerFragment.show(getFragmentManager(), "date_picker");
      }
    });
  }
  //实现DataCallBack的getData方法
  @Override
  public void getData(String data) {
    //data即为fragment调用该函数传回的日期时间
    timeText.setText(data);
  }
}

由于

TimePickerFragment
对话框是在
DatePickerFragment
类里面启动的,所以这样写只能日期和时间都选择,如果要单独选择日期或者时间,只需要重写
onTimeSet()
或者
onDateSet()
方法即可

兼容性问题

不同的android版本显示的效果不同,在android6.0效果很好,不过在一些低版本android(如4.0,笔者没有每个版本都测试)会出现调用两次回掉函数的情况,导致选择两次时间。解决的办法有很多,只要保证回调函数里面的逻辑只执行一次就可以。这里提供一种比较通用的方法。

重写

TimePickerDialog
DatePickerDialog
onStop()
方法

直接在Activity中使用的重写方法


final TimePickerDialog timePickerDialog = new TimePickerDialog(TestActivity.this, new TimePickerDialog.OnTimeSetListener() {
      //选择完时间后会调用该回调函数
      @Override
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        time.append(" " + hourOfDay + ":" + minute);
        //设置TextView显示最终选择的时间
        timeText.setText(time);
      }
    }, hour, minute, true){
     // 重写onStop()
      @Override
      protected void onStop() {
      }
    };
    //实例化DatePickerDialog对象
    DatePickerDialog datePickerDialog = new DatePickerDialog(TestActivity.this, new DatePickerDialog.OnDateSetListener() {
      //选择完日期后会调用该回调函数
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //因为monthOfYear会比实际月份少一月所以这边要加1
        time.append(year + "-" + (monthOfYear+1) + "-" + dayOfMonth);
        //选择完日期后弹出选择时间对话框
        timePickerDialog.show();
      }
    }, year, month, day){
      //重写onstop
      @Override
      protected void onStop() {
      }
    };

上面的写法看起来会比较乱,也可以另外新建一个类继承

TimePickerDialog
或者
DatePickerDialog
然后重写
onStop()
方法

通过

FragmentDialog
使用的重写方式

只需在

onCreateDialog()
方法里面重写即可,下面的代码会比较清晰


return new DatePickerDialog(getActivity(), this, year, month, day){
      // 重写onStop
      @Override
      protected void onStop() {
      }
    };

 return new TimePickerDialog(getActivity(), this, hour, minute, true){
      //重写onStop
      @Override
      protected void onStop() {
      }
    };

总结

笔者水平有限,但是保证以上代码都是亲手实现过一遍的。如果有什么不足之处欢迎大家指出,以上就是本文的全部内容,希望对大家开发Android能有所帮助。

您可能感兴趣的文章:轻松实现可扩展自定义的Android滚轮时间选择控件Android时间选择器、日期选择器实现代码Android中TimePicker与DatePicker时间日期选择组件的使用实例Android之日期及时间选择对话框用法实例分析解析android中系统日期时间的获取android计时器,时间计算器的实现方法android获取时间差的方法android 默认时间格式修改方法Android调用系统时间格式显示时间信息


--结束END--

本文标题: 安卓(Android)实现选择时间功能

本文链接: https://www.lsjlt.com/news/24246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现时间倒计时功能
    本文实例为大家分享了Android实现时间倒计时功能展示的具体代码,供大家参考,具体内容如下效果展示MainActivity(主页面代码)public class MainActivity extends Activity { priva...
    99+
    2023-05-30
    android 倒计时 roi
  • Android实现日期时间选择对话框
    日期/时间选择对话框(DatePickerDialog和TimePickerDialog)的使用,供大家参考,具体内容如下 <LinearLayout xmlns:a...
    99+
    2024-04-02
  • Android如何实现年月选择器功能
    目录一、效果图二、实现步骤:1、依赖库2、xml布局文件3、添加数据4、设置选择器弹出框5、设置弹出框dialog样式6、设置点击事件弹出四、总结开发过程中,年月的选择功能还是比较常...
    99+
    2024-04-02
  • Android开发实现日期时间控件选择
    本文实例为大家分享了Android开发实现日期时间控件选择的具体代码,供大家参考,具体内容如下 前言 整合Android原生控件(日期控件DatePicker、时间控件TimePic...
    99+
    2024-04-02
  • Android怎么实现年月选择器功能
    这篇文章给大家分享的是有关Android怎么实现年月选择器功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、效果图二、实现步骤:1、依赖库implementation 'cn.aigestu...
    99+
    2023-06-14
  • Android实现从相册选择照片功能
    本文实例为大家分享了Android实现从相册选择照片功能的具体代码,供大家参考,具体内容如下 之前在 《Android开发之裁剪照片》一文中介绍过,如何从相册选取照片和拍摄照片并进行...
    99+
    2024-04-02
  • jquery实现时间选择器
    本文实例为大家分享了jquery实现时间选择器的具体代码,供大家参考,具体内容如下 效果图: 代码: <!DOCTYPE html> <html> &...
    99+
    2024-04-02
  • JS实现时间选择器
    本文实例为大家分享了JS实现时间选择器的具体代码,供大家参考,具体内容如下 dateTime.js function withData(param) {   return param...
    99+
    2024-04-02
  • Android 照片选择区域功能实现示例
    实现 Android 的照片选择区域功能 主要有参考 pqpo/SmartCropper 1, 显示 显示四条边和八个点, 八个点: 4 个角和 4 条边的中点 Point...
    99+
    2024-04-02
  • Android studio实现日期 、时间选择器与进度条
    本文实例为大家分享了Android studio实现日期 、时间选择器与进度条,供大家参考,具体内容如下 日期选择器 public void onclick(View v){    ...
    99+
    2024-04-02
  • android中怎么实现长按选择文字功能
    android中怎么实现长按选择文字功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.实现原理原理其实也不难,简单总结就是:绘制文字时把显示的文字的坐标记录下来(记录文...
    99+
    2023-05-31
    android
  • Android实现计时器功能
    本文实例为大家分享了Android实现计时器功能的具体代码,供大家参考,具体内容如下 计时器工具类 import android.annotation.SuppressLint;...
    99+
    2024-04-02
  • Android中如何实现一个日期和时间选择器
    这篇文章给大家介绍Android中如何实现一个日期和时间选择器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。抽出来了一个方法来选择时间(这里自己规定的只能选择当前时间以后的日期),日期选择完毕就会自动弹出时间选择器让选...
    99+
    2023-05-30
    android
  • uniapp实现日期时间选择器
    本文实例为大家分享了uniapp实现日期时间选择器的具体代码,供大家参考,具体内容如下 由于项目需求需要,尝试过使用Vant组件库,但是一直出现问题,插件市场的插件又不太符合需求,使...
    99+
    2024-04-02
  • PHP开发买菜系统的配送时间选择功能实现方法
    PHP开发买菜系统的配送时间选择功能实现方法随着人们生活水平的提高和消费观念的变化,越来越多的人开始选择在网上购买生鲜食材,而不是传统的去菜市场买菜。因此,开发一套方便用户选择配送时间的功能变得非常重要。本文将介绍如何使用PHP实现一个买菜...
    99+
    2023-11-01
    实现方法 PHP开发 配送时间选择
  • JS如何实现时间选择器
    今天小编给大家分享一下JS如何实现时间选择器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。dateTime.jsfuncti...
    99+
    2023-07-02
  • android筛选功能怎么实现
    要实现Android筛选功能,可以按照以下步骤进行: 创建一个包含所有筛选选项的界面,可以是一个弹出窗口、抽屉式菜单或者单独的筛...
    99+
    2024-03-01
    android
  • Vue.js实现时间轴功能
    本文实例为大家分享了Vue.js实现时间轴功能的具体代码,供大家参考,具体内容如下 GitHub 时间轴组件封装 Main.js <template> <...
    99+
    2024-04-02
  • Vue实现时间轴功能
    本文实例为大家分享了Vue实现时间轴功能的具体代码,供大家参考,具体内容如下 <template>   <div class="container">    ...
    99+
    2024-04-02
  • vue实现时间倒计时功能
    本文实例为大家分享了vue实现时间倒计时功能的具体代码,供大家参考,具体内容如下 需求: 做一个剩余支付时间倒计时的效果 效果图: 代码: <template> ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作