Android日期时间选择器

日期选择器是很多应用所具备的,比如设置一些任务的开始和结束时间。为了方便用户的同时也为了界面的好看,很多都是采用日期选择器,我在网上看了一下。很多的日期选择器个人感觉不是很好看,但是修改起来也有点麻烦,于是自己就写了一个demo。至于界面效果个人感觉也是很low,毕竟鄙人不是搞UI的,所以也就凑合着看吧。这些都不重要,因为这些是可以修改的。

如果想实现具有年月日的请看下面的注意里面的内容,下图是实现的分钟为00 15 30 45的如果想要0-59的请看下面的注意里面的内容

如果需要的是仿iOS的带有星期几的

首先界面弹出PopupWindow动画的实现,具体的代码如下

进入动画


  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" > 
  3.  
  4.     <translate 
  5.         android:duration="500" 
  6.         android:fromYDelta="100.0%p" 
  7.         android:toYDelta="45" /> 
  8.  
  9. </set>  

退出动画


  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" > 
  3.  
  4.     <translate 
  5.         android:duration="500" 
  6.         android:fromYDelta="0.0" 
  7.         android:toYDelta="100.0%p" /> 
  8.  
  9. </set>  

主要界面的内容


  1. public class MainActivity extends Activity implements View.OnClickListener{ 
  2.     private TextView tv_house_time; 
  3.     private TextView tv_center; 
  4.     private WheelMain wheelMainDate; 
  5.     private String beginTime; 
  6.  
  7.     @Override 
  8.     protected void onCreate(Bundle savedInstanceState) { 
  9.         // TODO Auto-generated method stub 
  10.         super.onCreate(savedInstanceState); 
  11.         setContentView(R.layout.activity_main); 
  12.         initView(); 
  13.         initEvent(); 
  14.     } 
  15.  
  16.     private void initEvent() { 
  17.         tv_house_time.setOnClickListener(this); 
  18.     } 
  19.  
  20.     private void initView() { 
  21.         tv_house_time = (TextView) findViewById(R.id.tv_house_time); 
  22.         tv_center = (TextView) findViewById(R.id.tv_center); 
  23.     } 
  24.  
  25.     private java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
  26.     public void showBottoPopupWindow() { 
  27.         WindowManager manager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); 
  28.         Display defaultDisplay = manager.getDefaultDisplay(); 
  29.         DisplayMetrics outMetrics = new DisplayMetrics(); 
  30.         defaultDisplay.getMetrics(outMetrics); 
  31.         int width = outMetrics.widthPixels; 
  32.                 View menuView = LayoutInflater.from(this).inflate(R.layout.show_popup_window,null); 
  33.         final PopupWindow mPopupWindow = new PopupWindow(menuView, (int)(width*0.8), 
  34.                 ActionBar.LayoutParams.WRAP_CONTENT); 
  35.         ScreenInfo screenInfoDate = new ScreenInfo(this); 
  36.         wheelMainDate = new WheelMain(menuView, true); 
  37.         wheelMainDate.screenheight = screenInfoDate.getHeight(); 
  38.         String time = DateUtils.currentMonth().toString(); 
  39.         Calendar calendar = Calendar.getInstance(); 
  40.         if (JudgeDate.isDate(time, "yyyy-MM-DD")) { 
  41.             try { 
  42.                 calendar.setTime(new Date(time)); 
  43.             } catch (Exception e) { 
  44.                 e.printStackTrace(); 
  45.             } 
  46.         } 
  47.         int year = calendar.get(Calendar.YEAR); 
  48.         int month = calendar.get(Calendar.MONTH); 
  49.         int day = calendar.get(Calendar.DAY_OF_MONTH); 
  50.         int hours = calendar.get(Calendar.HOUR_OF_DAY); 
  51.         int minute = calendar.get(Calendar.MINUTE); 
  52.         wheelMainDate.initDateTimePicker(year, month, day, hours,minute); 
  53.         final String currentTime = wheelMainDate.getTime().toString(); 
  54.         mPopupWindow.setAnimationStyle(R.style.AnimationPreview); 
  55.         mPopupWindow.setTouchable(true); 
  56.         mPopupWindow.setFocusable(true); 
  57.         mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 
  58.         mPopupWindow.showAtLocation(tv_center, Gravity.CENTER, 0, 0); 
  59.         mPopupWindow.setOnDismissListener(new poponDismissListener()); 
  60.         backgroundAlpha(0.6f); 
  61.         TextView tv_cancle = (TextView) menuView.findViewById(R.id.tv_cancle); 
  62.         TextView tv_ensure = (TextView) menuView.findViewById(R.id.tv_ensure); 
  63.         TextView tv_pop_title = (TextView) menuView.findViewById(R.id.tv_pop_title); 
  64.         tv_pop_title.setText("选择起始时间"); 
  65.         tv_cancle.setOnClickListener(new View.OnClickListener() { 
  66.             @Override 
  67.             public void onClick(View arg0) { 
  68.                 mPopupWindow.dismiss(); 
  69.                 backgroundAlpha(1f); 
  70.             } 
  71.         }); 
  72.         tv_ensure.setOnClickListener(new View.OnClickListener() { 
  73.  
  74.             @Override 
  75.             public void onClick(View arg0) { 
  76.                 beginTime = wheelMainDate.getTime().toString(); 
  77.                 try { 
  78.                     Date begin = dateFormat.parse(currentTime); 
  79.                     Date end = dateFormat.parse(beginTime); 
  80.                     tv_house_time.setText(DateUtils.currentTimeDeatil(begin)); 
  81.                 } catch (ParseException e) { 
  82.                     e.printStackTrace(); 
  83.                 } 
  84.                 mPopupWindow.dismiss(); 
  85.                 backgroundAlpha(1f); 
  86.             } 
  87.         }); 
  88.     } 
  89.  
  90.     public void backgroundAlpha(float bgAlpha) { 
  91.         WindowManager.LayoutParams lp = getWindow().getAttributes(); 
  92.         lp.alpha = bgAlpha; 
  93.         getWindow().setAttributes(lp); 
  94.     } 
  95.  
  96.     @Override 
  97.     public void onClick(View v) { 
  98.         switch (v.getId()){ 
  99.             case R.id.tv_house_time: 
  100.                 showBottoPopupWindow(); 
  101.                 break; 
  102.         } 
  103.     } 
  104.  
  105.     class poponDismissListener implements PopupWindow.OnDismissListener { 
  106.         @Override 
  107.         public void onDismiss() { 
  108.             backgroundAlpha(1f); 
  109.         } 
  110.  
  111.     } 
  112. }  

布局内容的


  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:id="@+id/rel_select" 
  3.     android:layout_width="wrap_content" 
  4.     android:layout_height="wrap_content" 
  5.     android:layout_centerInParent="true" 
  6.     android:layout_margin="10dp" 
  7.     android:background="@drawable/border_circle_radius" 
  8.     android:orientation="vertical" > 
  9. <TextView 
  10.     android:background="#2F0F9980" 
  11.     android:padding="10dp" 
  12.     android:id="@+id/tv_pop_title" 
  13.     android:textSize="18sp" 
  14.     android:gravity="center" 
  15.     android:textColor="#301616" 
  16.     android:layout_width="match_parent" 
  17.     android:layout_height="wrap_content" /> 
  18.     <LinearLayout 
  19.         android:id="@+id/timePicker1" 
  20.         android:layout_width="match_parent" 
  21.         android:layout_height="wrap_content" 
  22.         android:orientation="horizontal" > 
  23.         <liuyongxiang.robert.com.testtime.wheelview.WheelView 
  24.             android:id="@+id/year" 
  25.             android:layout_width="wrap_content" 
  26.             android:layout_weight="1" 
  27.             android:layout_height="wrap_content" /> 
  28.         <liuyongxiang.robert.com.testtime.wheelview.DashedLineView 
  29.             android:layout_width="1dp" 
  30.             android:gravity="center_vertical" 
  31.             android:layout_gravity="center" 
  32.             android:background="@drawable/dotted_line" 
  33.             android:layout_height="match_parent" /> 
  34.         <liuyongxiang.robert.com.testtime.wheelview.WheelView 
  35.             android:id="@+id/month" 
  36.             android:layout_width="wrap_content" 
  37.             android:layout_weight="1" 
  38.             android:layout_height="wrap_content" /> 
  39.         <liuyongxiang.robert.com.testtime.wheelview.DashedLineView 
  40.             android:layout_width="1dp" 
  41.             android:gravity="center_vertical" 
  42.             android:layout_gravity="center" 
  43.             android:background="@drawable/dotted_line" 
  44.             android:layout_height="match_parent" /> 
  45.         <liuyongxiang.robert.com.testtime.wheelview.WheelView 
  46.             android:id="@+id/day" 
  47.             android:layout_width="wrap_content" 
  48.             android:layout_weight="1" 
  49.             android:layout_height="wrap_content" /> 
  50.         <liuyongxiang.robert.com.testtime.wheelview.DashedLineView 
  51.             android:layout_width="1dp" 
  52.             android:background="@drawable/dotted_line" 
  53.             android:layout_height="match_parent" /> 
  54.         <liuyongxiang.robert.com.testtime.wheelview.WheelView 
  55.             android:id="@+id/hour" 
  56.             android:layout_width="wrap_content" 
  57.             android:layout_weight="1" 
  58.             android:layout_height="wrap_content" /> 
  59.         <liuyongxiang.robert.com.testtime.wheelview.DashedLineView 
  60.             android:layout_width="1dp" 
  61.             android:background="@drawable/dotted_line" 
  62.             android:layout_height="match_parent" /> 
  63.         <liuyongxiang.robert.com.testtime.wheelview.WheelView 
  64.             android:id="@+id/mins" 
  65.             android:layout_width="wrap_content" 
  66.             android:layout_weight="1" 
  67.             android:layout_height="wrap_content" /> 
  68.     </LinearLayout> 
  69.     <LinearLayout 
  70.         android:layout_width="match_parent" 
  71.         android:layout_height="wrap_content" 
  72.         android:background="#2F0F9980" 
  73.         android:padding="10dp" 
  74.         android:orientation="horizontal" > 
  75.  
  76.         <TextView 
  77.             android:id="@+id/tv_cancle" 
  78.             android:layout_width="0dp" 
  79.             android:layout_height="wrap_content" 
  80.             android:gravity="center" 
  81.             android:paddingLeft="20dp" 
  82.             android:paddingRight="20dp" 
  83.             android:padding="5dp" 
  84.             android:textSize="18sp" 
  85.             android:textColor="#ff0000" 
  86.             android:layout_weight="1" 
  87.             android:background="@drawable/btn_pop" 
  88.             android:text="取消" /> 
  89.  
  90.         <TextView 
  91.             android:layout_width="0dp" 
  92.             android:layout_height="wrap_content" 
  93.             android:layout_weight="3" /> 
  94.  
  95.         <TextView 
  96.             android:id="@+id/tv_ensure" 
  97.             android:layout_width="0dp" 
  98.             android:layout_height="wrap_content" 
  99.             android:gravity="center" 
  100.             android:textColor="#414341" 
  101.             android:padding="5dp" 
  102.             android:paddingLeft="20dp" 
  103.             android:paddingRight="20dp" 
  104.             android:layout_weight="1" 
  105.             android:textSize="18sp" 
  106.             android:background="@drawable/btn_pop" 
  107.             android:text="确定" /> 
  108.     </LinearLayout> 
  109.  
  110. </LinearLayout>  

请注意

MainActivity里面的显示时间的 tv_house_time.setText(DateUtils.currentTimeDeatil(begin));需要更改为

tv_house_time.setText(DateUtils.formateStringH(beginTime,DateUtils.yyyyMMddHHmm));否则现实的额时间为00:00

修改后的

将WheelMain里面的以下代码


  1. wv_mins.setAdapter(adapter); 
  2. wv_mins.setCyclic(true);// 可循环滚动 
  3. wv_mins.setLabel(“分”);// 添加文字 
  4. int min = setMinute(m); 
  5. wv_mins.setCurrentItem(min);  

更换为


  1. wv_mins.setAdapter(new NumericWheelAdapter( 
  2. 0, 59)); 
  3. wv_mins.setCyclic(true);// 可循环滚动 
  4. wv_mins.setLabel(“分”);// 添加文字 
  5. wv_mins.setCurrentItem(m);  

还需要将


  1. int minute = Integer.valueOf(adapter.getItem(wv_mins.getCurrentItem())); 

改为


  1. int minute = wv_mins.getCurrentItem(); 

会将分钟更改为从0到59

如果不想要时间只想要年月日的话只需要


  1. if (hasSelectTime) { 
  2.  
  3. wv_hours.setVisibility(View.GONE); 
  4.  
  5. wv_mins.setVisibility(View.GONE); 
  6.  
  7. } else { 
  8.  
  9. wv_hours.setVisibility(View.GONE); 
  10.  
  11. wv_mins.setVisibility(View.GONE); 
  12.  
  13. wv_day.setVisibility(View.GONE); 
  14.  
  15. }  

将这段代码放开就可以了还要将以下绿色区域内的代码去掉

 

还需要将 MainActivty里的如下代码


  1. wheelMainDate.initDateTimePicker(year, month, day, hours,minute); 

更改为


  1. wheelMainDate.initDateTimePicker(year, month, day); 

还有 wheelMain里的


  1. if (!hasSelectTime) { 
  2.         sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-") 
  3.                 .append(strMon).append("-") 
  4.                 .append(strDay).append("  ").append(strHour).append(":").append(strMin); 
  5.     }else{ 
  6.         sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-") 
  7.                 .append(strMon).append("-") 
  8.                 .append(strDay).append("  ").append(strHour).append(":").append(strMin); 
  9.     }  

需要修改为


  1. if (!hasSelectTime) {      
  2.    sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-") 
  3.                 .append(strMon).append("-") 
  4.                 .append(strDay); 
  5.     }else{ 
  6.         sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-") 
  7.                 .append(strMon).append("-") 
  8.                 .append(strDay); 
  9.     }  

实现效果如下图

本文作者:佚名

来源:51CTO

时间: 2024-10-25 04:48:52

Android日期时间选择器的相关文章

安卓开发:Android日期时间选择器

这里贴上一个Demo的源码,分享一下:  代码如下 复制代码 import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.Vie

js日期时间选择器bootstrap

使用的是开源的架构 可以git clone git://github.com/smalot/bootstrap-datetimepicker.git 截图 十年视图 年视图 月视图 日视图* 小时视图 * Day view w/ meridian * Hour view w/ meridian * (*) Added views to select the time part. 依赖 需要bootstrap的下拉菜单组件 (dropdowns.less) 的某些样式,还有bootstrap的sp

Android日期时间格式国际化的实现代码_Android

在做多语言版本的时候,日期时间的格式话是一个很头疼的事情,幸好Android提供了DateFormate,可以根据指定的语言区域的默认格式来格式化. 直接贴代码: 复制代码 代码如下: public static CharSequence formatTimeInListForOverSeaUser( final Context context, final long time, final boolean simple, Locale locale) { final GregorianCale

Android日期时间格式国际化的实现代码

在做多语言版本的时候,日期时间的格式话是一个很头疼的事情,幸好Android提供了DateFormate,可以根据指定的语言区域的默认格式来格式化. 直接贴代码:复制代码 代码如下:public static CharSequence formatTimeInListForOverSeaUser( final Context context, final long time, final boolean simple, Locale locale) { final GregorianCalend

Android Studio时间选择器的创建方法

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 效果显示: 1.创建xml页面(我的项目扣下来的,有的地方会报错要改) <TextView android:id="@+id/consultation_tv_birthdate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_a

手机网站日期时间选择器(专业为移动而生)

这是一个适合移动设备WEB应用的日期和时间拾取器,在桌面版的日期拾取器我们一般用jQuery UI的datepicker插件,而移动手机版的日期拾取器则可以根据项目需求选择与jQuery Mobile配合的mobiscroll.js插件,它提供了友好的日期和时间选择操作界面,且易于配置和使用.   首先我们加载相关插件和样式文件,该插件基于jQuery和jQuery.mobile所以首先需要加载这两个库文件,然后再加载mobiscroll.js插件以及相关CSS文件. <script src=&qu

Java GUI实现的日期时间选择器

package cn.edu.hactcm; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Gra

只显示月、日、时-Android请教:同时显示日期和时间选择器

问题描述 Android请教:同时显示日期和时间选择器 开发中遇到一个问题: 需要在一个控件中同时显示日期和时间选择器 要求:日期只显示月.日:时间只显示24小时制的时 网上翻了好久没看见合适的,请教各位路过的大神给一些思路或者解决方案 解决方案 http://www.iteye.com/topic/1131942挺好的,不要年份的话,可以到xml里面将年份隐藏 解决方案二: http://www.2cto.com/kf/201407/320686.html 解决方案三: 朋友你好,你发的这个链

android 日期与时间选择控件用法

timepicker也继承自framelayout类.时间选择控件向用户显示一天中的时间(可以为24小时,也可以为am/pm制),并允许用户进行选择.如果要捕获用户修改时间数据的事件,便需要为timepicker添加ontimechangedlistener监听器 以下模拟日期与时间选择控件的用法 目录结构 main.xml布局文件 <?xml version="1.0" encoding="utf-8"?><linearlayout xmlns: