今天遇到一个时间弹出框的问题, 就是想用时间框的取消按钮清空文本显示的日期数据。
然而取消按钮每次都要调用OnDateSetListener.onDateSet方法,就会影响取消按钮完成的功能!
下面是我一步一步完成的过程,这样我觉得对大家的帮助也会很大(比直接给出)!
1.先说说一个自定义的时间弹出框,点击TextView,就弹出时间框
2.添加确定、取消按钮
3.取消和确定按钮分别完成功能,和之间的问题
一、自定义时间的弹出框
其实只是使用了jar包的DatePickerDialog(android.app.DatePickerDialog),在使用中,直接像TextView在布局文件中使用就可以了!
创建一个类DatePickerInput继承TextView:
(这里的确定和取消按钮都可以设置文本框的日期)
public class DatePickInput extends TextView {
//构造方法
public DatePickInput(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public DatePickInput(Context context, AttributeSet attrs) {
super(context, attrs);
public DatePickInput(Context context) {
super(context);
@Override
protected void onFinishInflate() {
//是否处在编辑模式,不能进行编辑
if (isInEditMode()) {
return;
//设置不可聚焦,避免TextView的输入
setFocusable(false);
//时间格式
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
//日历,获取日期
final Calendar c = Calendar.getInstance();
//DatePickInput的点击事件
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Date date = new Date();
try {
//从文本获取日期
date = dateFormat.parse(getText().toString());
catch (ParseException e) {
//将日历的时间修改为文本的显示日期
c.setTime(date);
//创建时间框,第一个参数是上下文,第二个参数是style,第三个参数是回调方法
//后面三个参数是时间框弹出时显示的日期
new DatePickerDialog(getContext(),com.example.test.R.style.dialog, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//将日历日期改为我们设置的日期
c.set(year, monthOfYear, dayOfMonth);
//修改文本显示日期
setText(dateFormat.format(c.getTime()));
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH))
.show();
二、添加确定和取消按钮
在上面的程序当中有确定和取消按钮,而且可以通过点击事件触发OnDateListener.onDateSet方法修改文本框的日期显示!
但是,我想要使用确定和取消按钮分别完成一个功能,这样就不能区分了(确定和取消都要调用OnDateListener.onDateSet方法)!
所以要自己分别添加这两个按钮,取消回调方法OnDateListener.onDateSet:
public class DatePickInput extends TextView {
private DatePickerDialog mDialog;
//构造方法
public DatePickInput(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public DatePickInput(Context context, AttributeSet attrs) {
super(context, attrs);
public DatePickInput(Context context) {
super(context);
@Override
protected void onFinishInflate() {
//是否处在编辑模式,不能进行编辑
if (isInEditMode()) {
return;
//设置不可聚焦,避免TextView的输入
setFocusable(false);
//时间格式
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
//日历,获取日期
final Calendar c = Calendar.getInstance();
//DatePickInput的点击事件
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Date date = new Date();
try {
//从文本获取日期
date = dateFormat.parse(getText().toString());
catch (ParseException e) {
//将日历的时间修改为文本的显示日期
c.setTime(date);
//创建时间框,第一个参数是上下文,第二个参数是style,第三个参数是回调方法
//后面三个参数是时间框弹出时显示的日期
mDialog = new DatePickerDialog(getContext(),com.example.test.R.style.dialog,null,
c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
//添加时间框的确定按钮,其实setButton是AlertDialog中的方法,DatePickerDialog继承过来的
mDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//将文本内容置为“1111”
setText("1111");
//添加时间框的取消按钮
mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//将文本内容置为空
setText("");
//时间框显示
mDialog.show();
三、取消清空文本、确定添加日期
现在问题就是确定按钮怎么为文本框设置日期:
(1)通过OnDateListener.onDateSet回调方法设置日期(确定和取消按钮点击就会触发该方法),就会使取消按钮失效(不采用)
(2)通过确定按钮设置,就需要使用DatePickerDialog中的DatePicker来获取用户设置的时间:
public class DatePickInput extends TextView {
private DatePickerDialog mDialog;
//构造方法
public DatePickInput(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public DatePickInput(Context context, AttributeSet attrs) {
super(context, attrs);
public DatePickInput(Context context) {
super(context);
@Override
protected void onFinishInflate() {
//是否处在编辑模式,不能进行编辑
if (isInEditMode()) {
return;
//设置不可聚焦,避免TextView的输入
setFocusable(false);
//时间格式
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
//日历,获取日期
final Calendar c = Calendar.getInstance();
//DatePickInput的点击事件
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Date date = new Date();
try {
//从文本获取日期
date = dateFormat.parse(getText().toString());
catch (ParseException e) {
//将日历的时间修改为文本的显示日期
c.setTime(date);
//创建时间框,第一个参数是上下文,第二个参数是style,第三个参数是回调方法
//后面三个参数是时间框弹出时显示的日期
mDialog = new DatePickerDialog(getContext(),com.example.test.R.style.dialog,null,
c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
//添加时间框的确定按钮,其实setButton是AlertDialog中的方法,DatePickerDialog继承过来的
mDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//将文本内容置为时间框中选择的日期
//通过mDialog.getDatePicker()获得dialog上的DatePicker组件,然后可以获取日期信息
DatePicker datePicker = mDialog.getDatePicker();
int year = datePicker.getYear();
int month = datePicker.getMonth();
int day = datePicker.getDayOfMonth();
c.set(year, month, day);
setText(dateFormat.format(c.getTime()));
//添加时间框的取消按钮
mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//将文本内容置为空
setText("");
//时间框显示
mDialog.show();
这样就完成了DatePickerDialog的确定设置文本的日期和取消按钮清空文本!
今天遇到一个时间弹出框的问题, 就是想用时间框的取消按钮清空文本显示的日期数据。然而取消按钮每次都要调用OnDateSetListener.onDateSet方法,就会影响取消按钮完成的功能!下面是我一步一步完成的过程,这样我觉得对大家的帮助也会很大(比直接给出)! 1.先说说一个自定义的时间弹出框,点击TextView,就弹出时间框 2.添加确定、取
近日测试给提了个新的bug,他们要在选择时间的时候,点击清空按钮下拉框不收起
看了element文档,发现没有清空按钮这个方法,实际的操作效果一点击就时间选择框就收起了,日常来说也能用 ,但是用户体验不蛮好,本着从用户至上的角度出发,开始了到网上寻找解决办法,
思路是先获取清空按钮事件,这位大佬提供的方法比较简单实在:
点击清空按钮后监听到的value 是个 null 然后根据null做判断,代码如下,具体大家可以点链接去看,看这里
timeChange(value) {
这是因为Element-ui中没有内置清除按钮的回调函数, 当点击清除按钮的时候,value会被设置为null。
因此要解决这个bug,我使用的方法是在下次调用之前,为value重新赋值
if (!newData) {
newData = []
因为Element-ui中没有内置清除按钮的回调函数,所以clear事件不生效
我就在为value重新赋值时添加我要做的事:
watch: {
time_v
最近有人问到关于如何实现类似Windows系统中时间调整的控件啊(红色部分),比如:
一开始我抓耳挠腮想了老半天没有结果,后来在其他人提醒之下想到了DateTimePicker控件,并且做了调整——只要设置几个属性就可以了:
1)Format设置为Time。
2)ShowUpDown设置为True。
但是如果说要增加“日期+时间”的选择怎么办呢?比如实现以下效果:
要实现既可以选...
java.lang.IllegalStateException: you have not supplyed the global app context info from SDKInitializ
10285
java.lang.IllegalStateException: you have not supplyed the global app context info from SDKInitializ
java.lang.IllegalStateException: you have not supplyed the global app context info from SDKInitializ
Android真机获取root权限,进入data目录
qq_30392681:
Android开发环境搭建
包子代码:
ADT离线集成
包子代码: