关于自定义控件或属性
[url=http://www.cnblogs.com/xiaoQLu/archive/2011/07/20/2112004.html]请转此学习[/url]
看代码之前先看看效果图
时间选择
[img]http://dl.iteye.com/upload/attachment/589888/29cf86f5-8846-309b-88c4-34dd9276ab6e.png[/img]
使用方法:配置为时间(dateTime:dateFormatStr="HH:mm:ss" dateTime:dateFormat="time")
看代码之前先看看效果图
日期选择
[img]http://dl.iteye.com/upload/attachment/589890/e8cf35e9-35d1-329b-8372-58b70fc9b209.png[/img]
使用方法:配置为日期(dateTime:dateFormatStr="yyyy-MM-dd" dateTime:dateFormat="date")
res/values/attrs.xml
实现类
实现类中用到的布局文件
date_pick_txt.xml
[url=http://www.cnblogs.com/xiaoQLu/archive/2011/07/20/2112004.html]请转此学习[/url]
看代码之前先看看效果图
时间选择
[img]http://dl.iteye.com/upload/attachment/589888/29cf86f5-8846-309b-88c4-34dd9276ab6e.png[/img]
使用方法:配置为时间(dateTime:dateFormatStr="HH:mm:ss" dateTime:dateFormat="time")
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dateTime="http://schemas.android.com/apk/res/com.app"/>
<com.app.view.DatePickText android:layout_marginLeft="7dp" android:layout_width="230dp" android:layout_height="35dp"
android:id="@+id/v_birthday" dateTime:dateFormatStr="HH:mm:ss" dateTime:dateFormat="time"/>
看代码之前先看看效果图
日期选择
[img]http://dl.iteye.com/upload/attachment/589890/e8cf35e9-35d1-329b-8372-58b70fc9b209.png[/img]
使用方法:配置为日期(dateTime:dateFormatStr="yyyy-MM-dd" dateTime:dateFormat="date")
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dateTime="http://schemas.android.com/apk/res/com.app"/>
<com.app.view.DatePickText android:layout_marginLeft="7dp" android:layout_width="230dp" android:layout_height="35dp"
android:id="@+id/v_birthday" dateTime:dateFormatStr="yyyy-MM-dd" dateTime:dateFormat="date"/>
res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="DatePickText">
<attr name="dateFormatStr" format="string"/>
<attr name="dateFormat" >
<!-- yyyy-MM-dd -->
<enum name="date" value="0" />
<!-- HH:mm:ss -->
<enum name="time" value="1" />
</attr>
</declare-styleable>
</resources>
实现类
package com.app.view;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TimePicker;
import com.app.R;
public class DatePickText extends LinearLayout {
private Integer dateFormat;
private String layout_height,layout_width;
private String dateFormatStr;
private EditText edit;
private ImageButton btn_date;
private LinearLayout layout;
public static final int TOP = 0;
public static final int BOTTOM = 1;
public static final int LEFT = 2;
public static final int RIGHT = 3;
public static final int DATE = 0;
public static final int TIME = 1;
private SimpleDateFormat df ;
private final Calendar cal = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);
public DatePickText(Context context) {
super(context);
}
public DatePickText(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typeA =context.obtainStyledAttributes(attrs, R.styleable.DatePickText);
layout_height=typeA.getString(R.styleable.DatePickText_layout_height);
layout_width=typeA.getString(R.styleable.DatePickText_layout_width);
dateFormatStr=typeA.getString(R.styleable.DatePickText_dateFormatStr);
dateFormat=typeA.getInteger(R.styleable.DatePickText_dateFormat,DATE);
//typeA.g
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.date_pick_txt,this);
layout=(LinearLayout)findViewById(R.id.date_linear);
edit=(EditText)findViewById(R.id.date_txt);
btn_date=(ImageButton)findViewById(R.id.date_btn);
processUi(context);
}
private void processUi(final Context context){
//ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(params);
//layout.setLayoutParams(params);
btn_date.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("-------------click------------");
buildDateOrTimeDialog(context);
}
});
}
private void buildDateOrTimeDialog(Context context){
df = new SimpleDateFormat(dateFormatStr);
switch(dateFormat)
{
case DATE:
date:
new DatePickerDialog( context,listener ,
cal .get(Calendar. YEAR ),
cal .get(Calendar. MONTH ),
cal .get(Calendar. DAY_OF_MONTH )
).show();
break;
case TIME:
System.out.println("----------time---------------");
new TimePickerDialog(context,timeListen,cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),true).show();
break;
default:
new DatePickerDialog( context,listener ,
cal .get(Calendar. YEAR ),
cal .get(Calendar. MONTH ),
cal .get(Calendar. DAY_OF_MONTH )
).show();
}
}
private DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener(){ //
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
cal .set(Calendar. YEAR , arg1);
cal .set(Calendar. MONTH , arg2);
cal .set(Calendar. DAY_OF_MONTH , arg3);
updateDate();
}
};
// 当 DatePickerDialog 关闭,更新日期显示
private void updateDate(){
edit.setText( df .format( cal .getTime()));
}
TimePickerDialog.OnTimeSetListener timeListen = new TimePickerDialog.OnTimeSetListener() {
//同DatePickerDialog控件
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, cal.get(Calendar.SECOND));
updateTimes();
}
};
//更新页面TextView的方法
private void updateTimes() {
edit.setText(df.format(cal.getTime()));
}
}
实现类中用到的布局文件
date_pick_txt.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:id="@+id/date_linear"
android:layout_width="230dp"
android:layout_height="35dp">
<RelativeLayout android:id="@+id/date_relative" android:layout_height="fill_parent" android:layout_width="fill_parent">
<EditText android:id="@+id/date_txt" android:editable="false" android:layout_height="fill_parent" android:layout_width="fill_parent"
android:includeFontPadding="false" android:hint="yyyy-mm-dd"/>
<ImageButton android:src="@drawable/date_pic" android:layout_width="28dp" android:layout_marginLeft="-33dp"
android:layout_alignBottom="@+id/date_txt" android:layout_centerInParent="true" android:layout_centerHorizontal="true"
android:layout_height="26dp" android:layout_toRightOf="@+id/date_txt" android:id="@+id/date_btn"/>/
</RelativeLayout>
</LinearLayout>
本文介绍如何在Android应用中自定义日期和时间选择控件,并提供了使用方法和示例代码。

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



