DatePicker和TimePicker组合后的Dialog
来源:互联网 发布:网络编辑发展前景 编辑:程序博客网 时间:2024/06/07 09:57
记录一下刚刚实现的一个组合的选择时间和日期的Dialog,可以根据自己的实际需要把日期中的 年、月、日的spinner隐藏,在类中已经提供了此方法,但是实际Demo并没有使用。
先展示完整的图片:
以下是:这是Activity代码
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class TimeDateActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time_date); Button btnDialog = (Button) findViewById(R.id.btn_dialog); btnDialog.setOnClickListener(this); } @Override public void onClick(View v) { new DateDialog(TimeDateActivity.this, new DateDialog.DateCallBack() { @Override public void onClick(String date) { Toast.makeText(TimeDateActivity.this, date + "", Toast.LENGTH_LONG).show(); } }); }}
下面是主布局部分代码:
<Button android:text="弹出Dialog" android:id="@+id/btn_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" />
下面是Dialog的布局代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <DatePicker android:layout_width="match_parent" android:id="@+id/date" android:calendarViewShown="false" android:layout_height="wrap_content" /> <TimePicker android:layout_width="match_parent" android:id="@+id/time" android:layout_height="wrap_content" /></LinearLayout>
接下来才是最重要的Dialog的代码:
package cn.edu.jxufe.demo01;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.view.LayoutInflater;import android.view.View;import android.widget.DatePicker;import android.widget.TimePicker;import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.Calendar;/** * 日期时间选择组合控件 * 使用方法: * 在Activity中:点击按钮,调用下面的函数 * new DateDialog(this, new DateDialog.DateCallBack() { * * @ Override * public void onChanged(String date) { * Toast.makeText(TimeDateActivity.this, date + "", Toast.LENGTH_LONG).show(); * } * }); */public class DateDialog implements DatePicker.OnDateChangedListener, TimePicker.OnTimeChangedListener { private String dateTime; private Context context; private DateCallBack listener; private DatePicker datePicker; private TimePicker timePicker; private View view; /** * 日期时间弹出选择框构造函数 * * @param context:获取组件的上下文 */ public DateDialog(Context context, DateCallBack listener) { this.context = context; this.listener = listener; //初始化视图中的控件 initPicker(); //初始化Dialog initDialog(); } /** * 初始化Picker和主视图 */ private void initPicker() { view = LayoutInflater.from(context).inflate(R.layout.dialog_time_date_view, null); datePicker = (DatePicker) view.findViewById(R.id.date); timePicker = (TimePicker) view.findViewById(R.id.time); Calendar calendar = Calendar.getInstance(); //隐藏年份 spinner 控件,也可以隐藏月份或日份 //hidYear(datePicker); datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); timePicker.setIs24HourView(true); timePicker.setOnTimeChangedListener(this); } /** * 弹出日期时间选择框方法 */ public void initDialog() { //初始化Dialog AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setIcon(R.drawable.ic_launcher); builder.setView(view); builder.setPositiveButton("设置", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { listener.onClick(dateTime); } }); builder.setNegativeButton("取消", null).create(); builder.show(); //刷新数据 onDateChanged(null, 0, 0, 0); } /** * 隐藏 选择 年份 的spinner * mYearSpinner:年份spinner * mMonthSpinner:月份spinner * mDaySpinner:日份spinner */ private void hidYear(DatePicker mDatePicker) { Field[] datePickerFields = mDatePicker.getClass().getDeclaredFields(); for (Field datePickerField : datePickerFields) { if ("mYearSpinner".equals(datePickerField.getName())) { datePickerField.setAccessible(true); Object dayPicker = new Object(); try { dayPicker = datePickerField.get(mDatePicker); } catch (IllegalAccessException | IllegalArgumentException e) { e.printStackTrace(); } ((View) dayPicker).setVisibility(View.GONE); } } } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { onDateChanged(null, 0, 0, 0); } @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Calendar calendar = Calendar.getInstance(); calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); dateTime = sdf.format(calendar.getTime()); } //采用接口回调的方式 获取点击dialog的'设置'之后的数据 public interface DateCallBack { public void onClick(String date); }}
以上就是全部,本人还只是个学了半年Android的小白,如果这个Demo有什么问题,请大家在下面留言,我定当及时改正,谢谢。
0 0
- DatePicker和TimePicker组合后的Dialog
- DatePicker 和 TimePicker的使用
- DatePicker和TimePicker的使用
- Android基础 DatePicker和TimePicker的使用
- Android之DatePicker和TimePicker的使用
- AndroidGUI05:DatePicker和TimePicker的常用技巧
- AndroidGUI05:DatePicker和TimePicker的常用技巧
- 日期和时间的调用DatePicker TimePicker
- TimePicker 和 DatePicker 的基本使用
- DatePicker和TimePicker的简单使用
- 关于DatePicker 和 TimePicker 的简单用法
- Android DatePicker 和TimePicker
- Android (DatePicker和TimePicker)
- ANDROID timepicker和datepicker
- DatePicker和TimePicker
- DatePicker和TimePicker入门
- DatePicker和TimePicker选择器
- DatePicker和TimePicker
- 在Matplotlib绘图中添加Latex风格公式
- Mac OS X安装wxpython
- MATLAB中的S-Function的用法(C语言)
- JAVA面试题:子类无法覆盖父类中的方法
- IOS 设计模式 备忘录模式
- DatePicker和TimePicker组合后的Dialog
- PendingIntent 用法深入理解
- 多态和抽象
- viewport和流式布局
- ListBox控件、CheckBox控件的多选功能
- swift 代码片段
- simulink调用自定义函数S-Function
- Universal-Image-Loader
- k近邻算法(KNN)及kd树简介(KD-Tree)