`
喧嚣求静
  • 浏览: 572777 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
关于自定义控件或属性
请转此学习
看代码之前先看看效果图
时间选择

使用方法:配置为时间(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"/>

看代码之前先看看效果图

日期选择

使用方法:配置为日期(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>


  • 大小: 70.4 KB
  • 大小: 58.9 KB
分享到:
评论
6 楼 喧嚣求静 2013-05-05  
javaxhw 写道
代码里面的 :R.declare-styleable.DatePickText
eclipse提示找不到啊?咋回事

<?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> 

5 楼 喧嚣求静 2013-05-05  
javaxhw 写道
javaxhw 写道
代码里面的 :R.declare-styleable.DatePickText
eclipse提示找不到啊?咋回事

找不到R.styleable.DatePickText_layout_height

<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"/> 

layout_height是android原有属性,在使用自定义组件时,填上就可。
4 楼 javaxhw 2012-11-10  
javaxhw 写道
代码里面的 :R.declare-styleable.DatePickText
eclipse提示找不到啊?咋回事

找不到R.styleable.DatePickText_layout_height
3 楼 javaxhw 2012-11-10  
代码里面的 :R.declare-styleable.DatePickText
eclipse提示找不到啊?咋回事
2 楼 喧嚣求静 2012-08-24  
endual 写道
这个正好是我要的效果呵呵,就是把代码复制下来错误了。
哎。。。,这个自定义的xml第一次用,所以不太懂。
多谢多谢

是不是,引用到图片资源没有,这个只要同名,你随便给个图片就可
1 楼 endual 2012-06-19  
这个正好是我要的效果呵呵,就是把代码复制下来错误了。
哎。。。,这个自定义的xml第一次用,所以不太懂。
多谢多谢

相关推荐

    android 自定义控件实现demo收集 及 框架收集

    自定义控件可以是简单的样式修改,如改变按钮的颜色和形状,也可以是复杂的交互设计,如自定义滑动选择器或动画效果。实现自定义控件通常涉及以下步骤: 1. 继承已存在的View类(如Button、TextView等)或 ...

    Android 自定义控件 组合控件

    总结起来,Android自定义组合控件的实现涉及到了对Android UI框架的深入理解和实践,包括继承自定义View或ViewGroup、测量与布局、绘制、事件处理等关键步骤。通过这样的方式,开发者可以构建出功能强大、交互丰富的...

    Android 自定义时间日期控件

    它们是预定义的UI组件,可以轻松地在布局XML文件中添加,并通过监听器获取用户选择的时间或日期。然而,这些控件的样式和交互方式可能无法满足所有设计要求。 2. **自定义控件的创建** 当需要自定义时间日期选择器...

    android 自定义控件-编辑框

    在Android中,我们可以通过继承已有的View或 ViewGroup 类来创建自定义控件。对于编辑框,我们可以选择继承自 EditText 类,因为它提供了基本的文本输入功能,我们可以在此基础上进行定制。 1. **创建自定义编辑...

    Android自定义组合控件

    在Android开发中,自定义控件是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何根据【标题】"Android自定义...如果你下载并研究这个"自定义组合控件"的示例,相信你会对Android自定义控件有更深入的理解。

    Android简单实现自定义控件

    别忘了在`&lt;merge&gt;`或`&lt;layout&gt;`标签内引入自定义控件的命名空间,并在`&lt;TestCustomWidget&gt;`标签中指定自定义属性: ```xml &lt;merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=...

    Android自定义控件开发.rar

    这份"Android自定义控件开发.rar"压缩包包含了一本名为《Android自定义控件开发入门与实战》的PDF教程,旨在帮助Android开发者深入理解和实践自定义控件的创建。 自定义控件在Android开发中的价值主要体现在以下几...

    Android 自定义日期选择框

    7. **主题样式**:为了让日期选择框与应用的整体风格保持一致,你需要考虑自定义控件的主题和颜色。可以使用主题属性或者自定义样式资源文件来控制UI的外观。 8. **兼容性**:确保自定义日期选择框在不同版本的...

    android 日期区间选择控件

    1. **创建布局文件**:设计XML布局文件,定义两个Spinner(下拉选择框)用于分别选择开始年份和结束年份,以及两个MonthPicker(月选择器)用于选择开始和结束月份。MonthPicker可以通过自定义View或者修改...

    自定义控件书籍

    总结而言,《自定义控件书籍》不仅全面覆盖了 Android 控件的基础知识,还深入探讨了自定义控件的开发技巧,并通过丰富的实例帮助读者掌握实际操作技能。无论是初学者还是有一定经验的开发者,都能从中获益良多。

    Android 自定义日期段选择控件功能(开始时间-结束时间)

    Android 自定义日期段选择控件功能是 Android 开发中常见的需求之一,该控件允许用户选择开始时间和结束时间,并且可以自定义控件的样式和行为。下面我们将详细介绍 Android 自定义日期段选择控件功能的实现过程。 ...

    安卓自定义控件相关-五种效果的Toast.rar

    在Android开发中,自定义控件是提升应用用户体验和界面个性化的重要手段。Toast作为一个轻量级的通知机制,常用于显示短暂的信息提示。本资源“安卓自定义控件相关-五种效果的Toast.rar”提供了五种不同的Toast实现...

    Android自定义控件知识文档.rar

    这份"Android自定义控件知识文档"涵盖了从基础知识到高级技巧的全方位教程,旨在帮助开发者深入理解和熟练掌握自定义控件的创建与应用。 首先,我们要了解自定义控件的基本概念。在Android中,控件是用户界面的基础...

    android 自定义View — 自定义组合控件

    5. **属性支持**:为了在XML布局文件中方便地设置自定义控件的属性,可以通过 attrs.xml 文件定义自定义属性,并在 init() 方法中解析这些属性。 6. **优化性能**:为提高性能,可以考虑使用硬件加速,避免不必要的...

    android 自定义 日期时间控件

    "android 自定义 日期时间控件"是一个项目,目标是模仿iPhone的日期时间选择器,并结合Android原生的日期和时间控件,提供更加美观且可定制化的交互体验。 在Android系统中,我们通常使用`DatePicker`和`TimePicker...

    Android炫酷的星期日期选择控件RollWeekView

    综上所述,创建一个如"RollWeekView"这样的自定义日期选择控件涉及到Android自定义视图、动画、触摸事件处理等多个技术点。通过巧妙地组合这些技术,我们可以构建出一个既实用又美观的UI组件,提升应用的整体体验。...

    Android 自定义 弹框,日期选择器 弹框,年月日,时分,

    综上所述,创建一个Android自定义的日期时间选择器弹框涉及到DialogFragment的使用、布局设计、日期和时间选择器的交互处理以及可能的样式和功能优化。这个过程需要对Android开发有深入的理解,包括布局管理、事件...

    Android自定义控件

    本篇文章将深入探讨Android自定义控件的相关知识,包括自定义控件的分类、创建过程以及常见技巧。 一、自定义控件的分类 1. 继承已有控件:通过继承已有的Android内置控件(如TextView、ImageView等),并重写其...

    Android自定义Spinner样式

    在Android开发中,Spinner是一个非常常用的控件,它允许用户从一组预定义的选项中进行选择。默认情况下,Spinner的样式可能...记住,良好的UI设计能够提升用户对应用的满意度,因此花时间在自定义控件样式上是值得的。

Global site tag (gtag.js) - Google Analytics