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
原创粉丝点击