坚持是个好东西,为啥我坚持不了呢!
需求是:输入框中,默认显示当前日期和时间,然后点击输入框进行时间选择器
首先效果图:
1.输入框
2,效果图(1)(安卓2.3,api 10)
效果图(2)(安卓6.0,api 23)
首先输入框代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="选择时间:"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/date_text"
android:textSize="18sp"
android:textColor="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
然后是自定义的dialog布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context="btzh.com.mydatetimepicker.MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:textSize="18sp"
android:text="请选择日期:"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<DatePicker
android:calendarViewShown="false"
android:datePickerMode="spinner"
android:id="@+id/date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip" />
<TextView
android:textSize="18sp"
android:text="请选择时间:"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TimePicker
android:timePickerMode = "spinner"
android:id="@+id/time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip" />
</LinearLayout>
</LinearLayout>
最后就是activity里面的代码了:
package btzh.com.mydatetimepicker;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.MotionEvent;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
EditText editText_date; //输入框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
editText_date = (EditText) findViewById(R.id.date_text);
editText_date.setOnTouchListener(this); //设置监听
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//创建弹出对话框对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//对话框布局
View view = View.inflate(this, R.layout.activity_main, null); //日期控件初始化
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.date_picker);
//时间控件初始化
final TimePicker timePicker = (android.widget.TimePicker) view.findViewById(R.id.time_picker);
builder.setView(view);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
datePicker.init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), null);
//24小时制
timePicker.setIs24HourView(true);
final int inType = editText_date.getInputType();
editText_date.setInputType(InputType.TYPE_NULL);
editText_date.onTouchEvent(event);
editText_date.setInputType(inType);
editText_date.setSelection(editText_date.getText().length());
builder.setPositiveButton("确 定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
sb.append(String.format("%d-%02d-%02d",
datePicker.getYear(),
datePicker.getMonth() + 1,
datePicker.getDayOfMonth()));
sb.append(" ");
sb.append(timePicker.getCurrentHour())
.append(":").append(timePicker.getCurrentMinute());
/**这边注释的代码是用StringBuffer来设置日期显示的我用的下面这种方式,具体有什么区别与好处,本人还不知道**/
// editText_date.setText(sb);
editText_date.setText(datePicker.getYear()+"-"+datePicker.getMonth()+"-"
+datePicker.getDayOfMonth()+" "+timePicker.getCurrentHour()+" : "+timePicker.getCurrentMinute());
dialog.cancel();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
Dialog dialog = builder.create();
dialog.show();
}
return true;
}
}
总结:
<DatePicker
android:calendarViewShown="false" //取消日历
android:datePickerMode="spinner" //spinner样式
只用这两句话同时使用才会起作用,显示如上图所示效果:
1.都不用,安卓5.0之后默认的日历效果
2.只用android:calendarViewShown="false"
会显示默认安卓5.0之后的日历效果
3.只用android:datePickerMode="spinner"
会同时显示滑动视图与默认日历视图
4.同时使用
出现如上图所示效果
<TimePicker
android:timePickerMode = "spinner" //spinner样式
android:calendarViewShown="false"
android:id="@+id/time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip" />
android:timePickerMode = “spinner” //spinner样式
如果不用这个属性,会默认显示钟表样式
获取系统时间:
Date localDate1 = new Date();
SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
String localtime = localSimpleDateFormat.format(localDate1);
EditText fssj_text = (EditText)findViewById(R.id.aqsc_sj);
fssj_text.setText(localtime);
显示效果:2016-12-13 14:18
把其中的换成:yyyy年MM月dd日 HH:mm
显示效果:2016年12月13日 14:18;
继续学习!!!
本文介绍了在Android中如何使用Datepicker和Timepicker实现输入框默认显示当前日期时间,并展示在不同API级别下的显示效果。通过设置`android:timePickerMode = "spinner"`来改变样式。同时,提供了获取和格式化系统时间的方法。
3275

被折叠的 条评论
为什么被折叠?



