资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android时间选择器,android 日期选择

android 怎么比较日期选择器的选择的时间和系统当前的时间

package com.wwj.datetimepicker;

创新互联是一家集网站建设,鄱阳企业网站建设,鄱阳品牌网站建设,网站定制,鄱阳网站建设报价,网络营销,网络优化,鄱阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

import java.text.SimpleDateFormat;

import java.util.Calendar;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.widget.DatePicker;

import android.widget.DatePicker.OnDateChangedListener;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.TimePicker;

import android.widget.TimePicker.OnTimeChangedListener;

/**

* 日期时间选择控件 使用方法: private EditText inputDate;//需要设置的日期时间文本编辑框 private String

* initDateTime="2012年9月3日 14:44",//初始日期时间值 在点击事件中使用:

* inputDate.setOnClickListener(new OnClickListener() {

*

* @Override public void onClick(View v) { DateTimePickDialogUtil

* dateTimePicKDialog=new

* DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime);

* dateTimePicKDialog.dateTimePicKDialog(inputDate);

*

* } });

*

* @author

*/

public class DateTimePickDialogUtil implements OnDateChangedListener,

OnTimeChangedListener {

private DatePicker datePicker;

private TimePicker timePicker;

private AlertDialog ad;

private String dateTime;

private String initDateTime;

private Activity activity;

/**

* 日期时间弹出选择框构造函数

*

* @param activity

* :调用的父activity

* @param initDateTime

* 初始日期时间值,作为弹出窗口的标题和日期时间初始值

*/

public DateTimePickDialogUtil(Activity activity, String initDateTime) {

this.activity = activity;

this.initDateTime = initDateTime;

}

public void init(DatePicker datePicker, TimePicker timePicker) {

Calendar calendar = Calendar.getInstance();

if (!(null == initDateTime || "".equals(initDateTime))) {

calendar = this.getCalendarByInintData(initDateTime);

} else {

initDateTime = calendar.get(Calendar.YEAR) + "年"

+ calendar.get(Calendar.MONTH) + "月"

+ calendar.get(Calendar.DAY_OF_MONTH) + "日 "

+ calendar.get(Calendar.HOUR_OF_DAY) + ":"

+ calendar.get(Calendar.MINUTE);

}

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));

}

/**

* 弹出日期时间选择框方法

*

* @param inputDate

* :为需要设置的日期时间文本编辑框

* @return

*/

public AlertDialog dateTimePicKDialog(final EditText inputDate) {

LinearLayout dateTimeLayout = (LinearLayout) activity

.getLayoutInflater().inflate(R.layout.common_datetime, null);

datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);

timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);

init(datePicker, timePicker);

timePicker.setIs24HourView(true);

timePicker.setOnTimeChangedListener(this);

ad = new AlertDialog.Builder(activity)

.setTitle(initDateTime)

.setView(dateTimeLayout)

.setPositiveButton("设置", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

inputDate.setText(dateTime);

}

})

.setNegativeButton("取消", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

inputDate.setText("");

}

}).show();

onDateChanged(null, 0, 0, 0);

return ad;

}

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

onDateChanged(null, 0, 0, 0);

}

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());

ad.setTitle(dateTime);

}

/**

* 实现将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒,并赋值给calendar

*

* @param initDateTime

* 初始日期时间值 字符串型

* @return Calendar

*/

private Calendar getCalendarByInintData(String initDateTime) {

Calendar calendar = Calendar.getInstance();

// 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒

String date = spliteString(initDateTime, "日", "index", "front"); // 日期

String time = spliteString(initDateTime, "日", "index", "back"); // 时间

String yearStr = spliteString(date, "年", "index", "front"); // 年份

String monthAndDay = spliteString(date, "年", "index", "back"); // 月日

String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月

String dayStr = spliteString(monthAndDay, "月", "index", "back"); // 日

String hourStr = spliteString(time, ":", "index", "front"); // 时

String minuteStr = spliteString(time, ":", "index", "back"); // 分

int currentYear = Integer.valueOf(yearStr.trim()).intValue();

int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;

int currentDay = Integer.valueOf(dayStr.trim()).intValue();

int currentHour = Integer.valueOf(hourStr.trim()).intValue();

int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();

calendar.set(currentYear, currentMonth, currentDay, currentHour,

currentMinute);

return calendar;

}

/**

* 截取子串

*

* @param srcStr

* 源串

* @param pattern

* 匹配模式

* @param indexOrLast

* @param frontOrBack

* @return

*/

public static String spliteString(String srcStr, String pattern,

String indexOrLast, String frontOrBack) {

String result = "";

int loc = -1;

if (indexOrLast.equalsIgnoreCase("index")) {

loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置

} else {

loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置

}

if (frontOrBack.equalsIgnoreCase("front")) {

if (loc != -1)

result = srcStr.substring(0, loc); // 截取子串

} else {

if (loc != -1)

result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串

}

return result;

}

}

/DateTimePicker/src/com/wwj/datetimepicker/DateTimePickerActivity.java

[java] view plain copy

package com.wwj.datetimepicker;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

/**

* 时间拾取器界面

*

* @author wwj_748

*

*/

public class DateTimePickerActivity extends Activity {

/** Called when the activity is first created. */

private EditText startDateTime;

private EditText endDateTime;

private String initStartDateTime = "2013年9月3日 14:44"; // 初始化开始时间

private String initEndDateTime = "2014年8月23日 17:44"; // 初始化结束时间

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 两个输入框

startDateTime = (EditText) findViewById(R.id.inputDate);

endDateTime = (EditText) findViewById(R.id.inputDate2);

startDateTime.setText(initStartDateTime);

endDateTime.setText(initEndDateTime);

startDateTime.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(

DateTimePickerActivity.this, initEndDateTime);

dateTimePicKDialog.dateTimePicKDialog(startDateTime);

}

});

endDateTime.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(

DateTimePickerActivity.this, initEndDateTime);

dateTimePicKDialog.dateTimePicKDialog(endDateTime);

}

});

}

}

自定义界面:

/DateTimePicker/res/layout/common_datetime.xml

[html] view plain copy

?xml version="1.0" encoding="utf-8"?

LinearLayout xmlns:android=""

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

DatePicker

android:id="@+id/datepicker"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:calendarViewShown="false" /

TimePicker

android:id="@+id/timepicker"

android:layout_width="wrap_content"

android:layout_height="wrap_content" /

/LinearLayout

源码下载:

android日期选择器怎么加入小时

只需要在日期控件旁边放置一个小时的控件即可timepicker:

!-- 显示用户输入日期、时间的控件 --

EditText android:id="@+id/show"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:editable="false"

android:cursorVisible="false"

/

TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="请选择日期和时间"

/

!-- 定义一个DatePicker组件 --

DatePicker android:id="@+id/datePicker"

android:layout_width="wrap_content"

android:layout_height="200dp"

android:layout_gravity="center_horizontal"

android:startYear="2000"

android:endYear="2050"

android:calendarViewShown="true"

android:spinnersShown="true"

/

!-- 定义一个TimePicker组件 --

TimePicker android:id="@+id/timePicker"

android:layout_width="wrap_content"

android:layout_height="100dp"

android:layout_gravity="center_horizontal"

/

/LinearLayout

Android仿ios条件选择器pickerview

最近怎么老写View,可能写view比较方便,写其它东西还要抽时间整理总结,写View就直接封完写出来就行。

准备国庆放假,无心工作,那就写篇简单实用一点的文章,总不能白白浪费了时间。

有时候ios端会用到条件选择器,好像是那边自带的,而android这边是没有的,但是为了两端统一,没办法,只能我们去迁就他们了(你让一个有自带的去写自定义是基本不可能的事)。

最经典的是我们有选择地址的需求,比如美团这里的:

这个android是原生是没有的,只有能选择日期的。那怎么办?自定义,好像略难,那就用三方的吧。

我找了很多,就觉得这个库是做得比较好,比较完整的,而且也一直有在维护,还是比较推荐,使用起来也比较方便。项目里有很清晰的文档,建议看之前先浏览过文档。

我使用的效果:

我还是顺便把源码也浏览了下。发现这里有3个比较重要的类,这个之后会简单的介绍:

(1)WheelView

(2)条件选择的WheelOptions, 我感觉这个类的封装有点vm的意思

(3)最外层封装的OptionsPickerView

如果只是为了选择地址的话直接用它封装好的就行,但是有时候可能会需要用到其它的布局或需求,那我们就要在它原有的功能上进行扩展,比如说我写的这个时间段的现在,直接用是没有的,需要自己扩展。

而要进行扩展的话,就要先浏览源码看看它内部怎么写的。

可以从调用的地方找到OptionsPickerView类

然后看看OptionsPickerView类内部,你会发现很多方法,但是基本都是builder方法个getset方法,我们可以找到重要的几个方法。

这里做的是为view设置属性。重要的是这里

这里的意思就是把这个View给WheelOptions这个对象,让它来做处理。然后可以看

看布局。

可以看出它里面是写死固定就是3列。其实我不太赞成这样的做法,对于这样的多情况view的封装,我个人还是比较喜欢做动态的。由于这里固定是3列,所以我上图中4列的情况直接使用是实现不了的,所以需要扩展。这里的WheelView就是单列

它这里布局写死了固定3列,那我肯定是没法复用它的这个布局了,所以就只能重写布局。

我只写了LinearLayout,就是要动态去添加WheelView。

原本的OptionsPickerView中

在builder构造时就固定了布局,所以我这不好扩展,不如重写一个OptionsPickerView,当然重写Builder也行,但是我觉得重写OptionsPickerView比较好。而且他原本只有两个类

所以我们需要继承BasePickerView重写一个PickerView,他原本内部的逻辑没问题,我就抄过来用好了。

修改了

(1)修改布局变成我的布局

(2)然后把创建WheelView给加扩展createWheel(optionsPicker, context, total);因为我不想每次都都写Builder这么多参数,我把这个pickerview当成中间成来弄,让子类继承它来做简单的扩展

我们重写个WheelView,因为原本的WheelView是做固定3列的处理,我们需要做成个动态的。

(1)我多添加了个参数total表示要展示多少列

(2)用ListWheelView wvList数组来动态创建添加WheelView

(3)用ListListT items 来装每一列的数据(我这个Wheel只做了不关联情况下的多列,关联情况下我没弄)

(4)showWheelView();

这个方法做展示的规则,默认是平均展示total列,而如果需要做特殊的展示情况,像我上边一样的,就写个类继承这个类重新这个方法重新展示的规则就行,比如我的时间期间选择器。

重写这个方法就能展示出自己需要展示的效果

调用时也很方便。

我讲这篇的目的是为了第一介绍一下这个三方库,还是比较实用的。第二,说下扩展的重要性。第三,放假了实在工作效率低。

这个控件叫:Picker/选择器/拾取器

Picker(选择器/拾取器/选取器)是指提供多个选项集合供用户选择其中一项的控件。在不同平台Picker的具体控件表现形式不同。在iOS端Picker一般称之为滚轮选择器,而在Android端,Picker的主要表现形式是Dialog(对话框)或dropdown menu(下拉菜单)。

在移动端Picker最常见的用途是选择时间,iOS和Android将时间相关的Picker封装成原生控件。

如果Date Picker呈现形式是日历,也可以称之为Calendar Date Picker(日历选择器)。Date Range Picker(日期范围选择器)是用来选择某个日期范围,常用于旅行、住宿等时间周期相关事项。

Picker展示区域有限,大部分选项会被隐藏,最好是当用户对所有选项都比较熟悉、有预期的时候,才使用Picker。

这个控件叫:Badge/徽标/小红点

这个控件叫:A-Z index/字母索引导航

这个控件叫:Segment Controls/分段控件(附录与Tabs的区别)

这个控件叫:Skeleton Screen/加载占位图

这个控件叫:Page Indicator/Page Controls/页面指示器

这个控件叫:Stepper/步进器

这个控件叫:Switch/开关/滑动开关/切换开关

Toast(吐司提示)的曾经、现在与未来

这个控件叫:Soft Keyboard/Virtual Keyboard/软键盘/虚拟键盘

这个控件叫:Action Sheet/动作菜单/动作面板/行动列表

这个控件叫:Popover/气泡弹出框/弹出式气泡/气泡

这个控件叫:Text fields/输入框/文本框

这个控件可能叫:Notice Bar/通告栏

android 时间选择器怎么设置不可选

先定义你的Edtext 然后为他定义一个点击事件 如 //Time 是Edtext的ID Time.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new DatePickerDialog(text6.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {QS.setText("起始日期:" + String.format("%d-%d-%d", year, monthOfYear + 1, dayOfMonth));} //2016,1,1是弹出时间选择器的默认时间}, 2016, 1, 2).show();} }); 哪里不了解再问


新闻标题:android时间选择器,android 日期选择
文章位置:http://cdkjz.cn/article/dsdjicj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220