天殇黑侠

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

xml布局:

 1     <?xml version="1.0" encoding="utf-8"?>  
 2     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
 3         android:layout_width="fill_parent"  
 4         android:layout_height="fill_parent"  
 5         android:orientation="vertical" >  
 6       
 7         <DatePicker  
 8             android:id="@+id/datepicker"  
 9             android:layout_width="wrap_content"  
10             android:layout_height="wrap_content"  
11             android:calendarViewShown="false" />  
12       
13         <TimePicker  
14             android:id="@+id/timepicker"  
15             android:layout_width="wrap_content"  
16             android:layout_height="wrap_content" />  
17       
18     </LinearLayout>  

Java代码:

自定义弹出框:

  1     public class DateTimePickDialogUtil implements OnDateChangedListener,  
  2             OnTimeChangedListener {  
  3         private DatePicker datePicker;  
  4         private TimePicker timePicker;  
  5         private AlertDialog ad;  
  6         private String dateTime;  
  7         private String initDateTime;  
  8         private Activity activity;  
  9       
 10         /** 
 11          * 日期时间弹出选择框构造函数 
 12          *  
 13          * @param activity 
 14          *            :调用的父activity 
 15          * @param initDateTime 
 16          *            初始日期时间值,作为弹出窗口的标题和日期时间初始值 
 17          */  
 18         public DateTimePickDialogUtil(Activity activity, String initDateTime) {  
 19             this.activity = activity;  
 20             this.initDateTime = initDateTime;  
 21       
 22         }  
 23       
 24         public void init(DatePicker datePicker, TimePicker timePicker) {  
 25             Calendar calendar = Calendar.getInstance();  
 26             if (!(null == initDateTime || "".equals(initDateTime))) {  
 27                 calendar = this.getCalendarByInintData(initDateTime);  
 28             } else {  
 29                 initDateTime = calendar.get(Calendar.YEAR) + "年"  
 30                         + calendar.get(Calendar.MONTH) + "月"  
 31                         + calendar.get(Calendar.DAY_OF_MONTH) + "日 "  
 32                         + calendar.get(Calendar.HOUR_OF_DAY) + ":"  
 33                         + calendar.get(Calendar.MINUTE);  
 34             }  
 35       
 36             datePicker.init(calendar.get(Calendar.YEAR),  
 37                     calendar.get(Calendar.MONTH),  
 38                     calendar.get(Calendar.DAY_OF_MONTH), this);  
 39             timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));  
 40             timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));  
 41         }  
 42       
 43         /** 
 44          * 弹出日期时间选择框方法 
 45          *  
 46          * @param inputDate 
 47          *            :为需要设置的日期时间文本编辑框 
 48          * @return 
 49          */  
 50         public AlertDialog dateTimePicKDialog(final EditText inputDate) {  
 51             LinearLayout dateTimeLayout = (LinearLayout) activity  
 52                     .getLayoutInflater().inflate(R.layout.common_datetime, null);  
 53             datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);  
 54             timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);  
 55             init(datePicker, timePicker);  
 56             timePicker.setIs24HourView(true);  
 57             timePicker.setOnTimeChangedListener(this);  
 58       
 59             ad = new AlertDialog.Builder(activity)  
 60                     .setTitle(initDateTime)  
 61                     .setView(dateTimeLayout)  
 62                     .setPositiveButton("设置", new DialogInterface.OnClickListener() {  
 63                         public void onClick(DialogInterface dialog, int whichButton) {  
 64                             inputDate.setText(dateTime);  
 65                         }  
 66                     })  
 67                     .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
 68                         public void onClick(DialogInterface dialog, int whichButton) {  
 69                             inputDate.setText("");  
 70                         }  
 71                     }).show();  
 72       
 73             onDateChanged(null, 0, 0, 0);  
 74             return ad;  
 75         }  
 76       
 77         public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {  
 78             onDateChanged(null, 0, 0, 0);  
 79         }  
 80       
 81         public void onDateChanged(DatePicker view, int year, int monthOfYear,  
 82                 int dayOfMonth) {  
 83             // 获得日历实例  
 84             Calendar calendar = Calendar.getInstance();  
 85       
 86             calendar.set(datePicker.getYear(), datePicker.getMonth(),  
 87                     datePicker.getDayOfMonth(), timePicker.getCurrentHour(),  
 88                     timePicker.getCurrentMinute());  
 89             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");  
 90       
 91             dateTime = sdf.format(calendar.getTime());  
 92             ad.setTitle(dateTime);  
 93         }  
 94       
 95         /** 
 96          * 实现将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒,并赋值给calendar 
 97          *  
 98          * @param initDateTime 
 99          *            初始日期时间值 字符串型 
100          * @return Calendar 
101          */  
102         private Calendar getCalendarByInintData(String initDateTime) {  
103             Calendar calendar = Calendar.getInstance();  
104       
105             // 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒  
106             String date = spliteString(initDateTime, "日", "index", "front"); // 日期  
107             String time = spliteString(initDateTime, "日", "index", "back"); // 时间  
108       
109             String yearStr = spliteString(date, "年", "index", "front"); // 年份  
110             String monthAndDay = spliteString(date, "年", "index", "back"); // 月日  
111       
112             String monthStr = spliteString(monthAndDay, "月", "index", "front"); //
113             String dayStr = spliteString(monthAndDay, "月", "index", "back"); //
114       
115             String hourStr = spliteString(time, ":", "index", "front"); //
116             String minuteStr = spliteString(time, ":", "index", "back"); //
117       
118             int currentYear = Integer.valueOf(yearStr.trim()).intValue();  
119             int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;  
120             int currentDay = Integer.valueOf(dayStr.trim()).intValue();  
121             int currentHour = Integer.valueOf(hourStr.trim()).intValue();  
122             int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();  
123       
124             calendar.set(currentYear, currentMonth, currentDay, currentHour,  
125                     currentMinute);  
126             return calendar;  
127         }  
128       
129         /** 
130          * 截取子串 
131          *  
132          * @param srcStr 
133          *            源串 
134          * @param pattern 
135          *            匹配模式 
136          * @param indexOrLast 
137          * @param frontOrBack 
138          * @return 
139          */  
140         public static String spliteString(String srcStr, String pattern,  
141                 String indexOrLast, String frontOrBack) {  
142             String result = "";  
143             int loc = -1;  
144             if (indexOrLast.equalsIgnoreCase("index")) {  
145                 loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置  
146             } else {  
147                 loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置  
148             }  
149             if (frontOrBack.equalsIgnoreCase("front")) {  
150                 if (loc != -1)  
151                     result = srcStr.substring(0, loc); // 截取子串  
152             } else {  
153                 if (loc != -1)  
154                     result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串  
155             }  
156             return result;  
157         }  
158       
159     }  

主界面添加事件:

 1     public class DateTimePickerActivity extends Activity {  
 2         /** Called when the activity is first created. */  
 3         private EditText  DateTime;  
 4        
 5       
 6         private String initDateTime = "2013年9月3日 14:44"; // 初始化开始时间  
 7            
 8       
 9         @Override  
10         public void onCreate(Bundle savedInstanceState) {  
11             super.onCreate(savedInstanceState);  
12             setContentView(R.layout.activity_main);  
13        
14              DateTime = (EditText) findViewById(R.id.inputDate);  
15                
16       
17              DateTime.setText(initDateTime);  
18            
19             DateTime.setOnClickListener(new OnClickListener() {  
20                 public void onClick(View v) {  
21       
22                     DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(  
23                             DateTimePickerActivity.this, initDateTime);  
24                     dateTimePicKDialog.dateTimePicKDialog(DateTime);  
25       
26                 }  
27             });   
28                
29         }  
30     }  

效果图:

posted on 2016-10-23 20:22  天殇黑侠  阅读(490)  评论(0编辑  收藏  举报