android自定义控件或属性-日期时间选择框

本文介绍如何在Android应用中自定义日期和时间选择控件,并提供了使用方法和示例代码。
关于自定义控件或属性
[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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值