extjs 如何自定义样式TimePicker的样式

本帖子已过去太久远了,不再提供回复功能。[android] 解决DatePickerDialog和TimePickerDialog控件取消按钮问题
一. 问题提出
在程序中,我们通常需要使用DatePicker来设置日期,TimePicker来设置时间。其基本步骤是:
1.先定义DatePicker和TimePicker布局
2.然后通过Calendar类获得时间
3.接着通过init方法将日期传递给DatePicker初始化日期控件
4.在响应点击事件中可以通过DatePicker的getYear()、getDayOfMonth()、getMonth()函数获取具体日期
同时可以在OnDateChangedListener事件中监听日期变化,设置时间函数方法同理。但是使用DatePickerDialog或TimePickerDialog控件时会遇到的一个问题,它就是android版本4.0后没有取消(Cancel)按钮,同时点击界面任何部分都能获取日期或时间,据说它是版本存在的BUG。对比图如下所示:
但是我们期待的效果如下图所示:
我采取的解决方法是通过自定义XML布局,经过DatePicker和TimePicker控件实现,同时在AlertDialog中设置取消按钮和确定按钮,通过函数setNegativeButton()和setPositiveButton()实现。
二. 简单实现日期和时间控件
简单实现方法非常简单,不需要设置日期或时间的XML布局,直接通过new DatePickerDialog或TimePickerDialog即可实现。代码如下:
//点击日期按钮布局 设置日期
layoutDate.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int month, int day) {
// TODO Auto-generated method stub
//更新EditText控件日期 小于10加0
dateEdit.setText(new StringBuilder().append(mYear).append(-)
.append((mMonth + 1) & 10 ? 0 + (mMonth + 1) : (mMonth + 1))
.append(-)
.append((mDay & 10) ? 0 + mDay : mDay) );
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH) ).show();
其中mYear、mMonth、mDay是定义变量,同时dateEdit是一个EditText控件用于显示具体日期,当数字小于10时前补0,如。下面是设置时间,显示效果和第三部分的效果相同。
//点击时间按钮布局 设置时间
layoutTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new TimePickerDialog(MainActivity.this,
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hour, int minute) {
// TODO Auto-generated method stub
//更新EditText控件时间 小于10加0
timeEdit.setText(new StringBuilder()
.append(mHour & 10 ? 0 + mHour : mHour).append(:)
.append(mMinute & 10 ? 0 + mMinute : mMinute).append(:00) );
}, calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), true).show();
三. 自定义布局实现
下面是自定义布局实现,而且我自认为该界面布局非常好看,这也是我&随手拍&项目自己最后总结出来的一个比较欣赏的界面吧!希望你也喜欢,效果如下:
如图所示,界面中日期、时间EditText不可编辑,需要通过点击底部布局来设置。同时备注信息的EditText通过自定义背景实现,设置日期、时间中有取消按钮。
1.项目结构如下图所示
2.activity_main.xml布局文件
3.date_dialog.xml文件:日期控件布局
4.time_dialog.xml文件:时间控件布局
5.drawable-hdpi中editview_shape.xml文件 实现自定义EditText控件格式
6.MainActivity.java
public class MainActivity extends Activity {
//自定义变量
private EditText titleE
private EditText dateE
private EditText timeE
private EditText contentE
//底部四个布局按钮
private LinearLayout layoutD
private LinearLayout layoutT
private LinearLayout layoutC
private LinearLayout layoutS
//定义显示时间控件
private C //通过Calendar获取系统时间
private int mY
private int mM
private int mD
private int mH
private int mM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//锁定屏幕
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
//获取对象
titleEdit = (EditText) findViewById(R.id.showtitle);
dateEdit = (EditText) findViewById(R.id.showdate);
timeEdit = (EditText) findViewById(R.id.showtime);
contentEdit = (EditText) findViewById(R.id.editText1);
layoutDate = (LinearLayout) findViewById(R.id.layout_date);
layoutTime = (LinearLayout) findViewById(R.id.layout_time);
layoutCancel = (LinearLayout) findViewById(R.id.layout_cancel);
layoutSave = (LinearLayout) findViewById(R.id.layout_save);
calendar = Calendar.getInstance();
//点击日期按钮布局 设置日期
layoutDate.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//通过自定义控件AlertDialog实现
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
View view = (LinearLayout) getLayoutInflater().inflate(R.layout.date_dialog, null);
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.date_picker);
//设置日期简略显示 否则详细显示 包括:星期周
datePicker.setCalendarViewShown(false);
//初始化当前日期
calendar.setTimeInMillis(System.currentTimeMillis());
datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), null);
//设置date布局
builder.setView(view);
builder.setTitle(设置日期信息);
builder.setPositiveButton(确
定, new DialogInterface.OnClickListener() {
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()));
dateEdit.setText(sb);
//赋值后面闹钟使用
mYear = datePicker.getYear();
mMonth = datePicker.getMonth();
mDay = datePicker.getDayOfMonth();
dialog.cancel();
builder.setNegativeButton(取
消, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
builder.create().show();
layoutDate.setOnTouchListener(new OnTouchListener() { //设置布局背景
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
layoutDate.setBackgroundColor(Color.WHITE);
layoutTime.setBackgroundColor(Color.TRANSPARENT);
layoutCancel.setBackgroundColor(Color.TRANSPARENT);
layoutSave.setBackgroundColor(Color.TRANSPARENT);
//点击时间按钮布局 设置时间
layoutTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//自定义控件
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
View view = (LinearLayout) getLayoutInflater().inflate(R.layout.time_dialog, null);
final TimePicker timePicker = (TimePicker) view.findViewById(R.id.time_picker);
//初始化时间
calendar.setTimeInMillis(System.currentTimeMillis());
timePicker.setIs24HourView(true);
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(Calendar.MINUTE);
//设置time布局
builder.setView(view);
builder.setTitle(设置时间信息);
builder.setPositiveButton(确
定, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mHour = timePicker.getCurrentHour();
mMinute = timePicker.getCurrentMinute();
//时间小于10的数字 前面补0 如01:12:00
timeEdit.setText(new StringBuilder().append(mHour & 10 ? 0 + mHour : mHour).append(:)
.append(mMinute & 10 ? 0 + mMinute : mMinute).append(:00) );
dialog.cancel();
builder.setNegativeButton(取
消, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
builder.create().show();
layoutTime.setOnTouchListener(new OnTouchListener() { //设置布局背景
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
layoutDate.setBackgroundColor(Color.TRANSPARENT);
layoutTime.setBackgroundColor(Color.WHITE);
layoutCancel.setBackgroundColor(Color.TRANSPARENT);
layoutSave.setBackgroundColor(Color.TRANSPARENT);
//点击取消按钮
layoutCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dateEdit.setText();
dateEdit.setHint();
timeEdit.setText();
timeEdit.setHint(00:00:00);
contentEdit.setText();
contentEdit.setHint(记录旅途中的备注信息...);
layoutCancel.setOnTouchListener(new OnTouchListener() { //设置布局背景
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
layoutDate.setBackgroundColor(Color.TRANSPARENT);
layoutTime.setBackgroundColor(Color.TRANSPARENT);
layoutCancel.setBackgroundColor(Color.WHITE);
layoutSave.setBackgroundColor(Color.TRANSPARENT);
//点击保存按钮
layoutSave.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//确认保存按钮
new AlertDialog.Builder(MainActivity.this).setTitle(确认保存吗?)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(确
定, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
* 插入操作
.setNegativeButton(返
回, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).show();
layoutSave.setOnTouchListener(new OnTouchListener() { //设置布局背景
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
layoutDate.setBackgroundColor(Color.TRANSPARENT);
layoutTime.setBackgroundColor(Color.TRANSPARENT);
layoutCancel.setBackgroundColor(Color.TRANSPARENT);
layoutSave.setBackgroundColor(Color.WHITE);
} // End onCreate
最后希望文章对大家有所帮助!如果你知道我这篇文章想要阐述的内容是什么?为什么要写这篇文章?或许它会对你有所帮助,一方面是布局可能对你有启发;另一方面就是刚好遇到那个问题的同学。
在点击&保存&按钮时,也可把数据存储至数据库中调用MySQLiteOpenHelper,这里就不再介绍。写着写着就到了凌晨5点了,程序猿生活还是要改下啊~自己保重自己的身体吧!期待改正自己的作息,难难难~如何自定义DatePickerDialog和TimePickerDialog??改变其样式、颜色等
让学习成为一种习惯
布局中添加DatePicker + TimePicker,然后使用 AlertDialog显示
你还没有登录,请先登录或注册慕课网帐号
37607人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2&>&&>&&>&&>&MyPicker 自定义日期时间控件 可自定义样式
MyPicker 自定义日期时间控件 可自定义样式
上传大小:111KB
基于kankan.wheel.widget开源控件 编写的DatePicker 和 TimePicker
可以自定义样式,kankan.wheel.widget.WheelView 都加了中文注释。
需要在项目中使用日期时间输入,同时要求Picker样式符合应用主题的童鞋可以试试。
综合评分:4.4(88位用户评分)
所需积分:1
下载次数:389
审核通过送C币
创建者:redwolfchao
创建者:ch
创建者:doomlord
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
MyPicker 自定义日期时间控件 可自定义样式
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:

我要回帖

更多关于 如何自定义滚动条样式 的文章

 

随机推荐