本人利用WheelView写的一个DatePickerDialog
(还有一个TimePickerDialog,本人忘了在写在哪个项目里了,等找到了也贴上来)
DatePickerDialog的布局文件:
style:
使用:
(还有一个TimePickerDialog,本人忘了在写在哪个项目里了,等找到了也贴上来)
先看图,有个直观的了解
DatePickerDialog代码:
- import java.util.Calendar;
- import com.widget.wheel.NumericWheelAdapter;
- import com.widget.wheel.OnWheelScrollListener;
- import com.widget.wheel.WheelView;
- import com.yirui.youbao.app.R;
- import android.app.Dialog;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- /**
- *
- * @author pythoner
- *
- */
- public class DatePickerDialog extends Dialog
- {
- private Button btn_left, btn_right;
- private WheelView year, month, day;
- private String date;//初始化显示的日期,默认为当日
- public DatePickerDialog(Context context, String date)
- {
- // super(context);
- this(context, R.style.Theme_Dialog_NoTitle, date);
- // TODO Auto-generated constructor stub
- }
- public DatePickerDialog(Context context, int theme, String date)
- {
- super(context, theme);
- // TODO Auto-generated constructor stub
- this.date = date;
- init();
- }
- private void init()
- {
- this.setCanceledOnTouchOutside(true);
- this.setCancelable(true);
- }
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.dialog_date_picker);
- initViews();
- initValues();
- }
- private void initViews()
- {
- btn_left = (Button) findViewById(R.id.btn_left);
- btn_left.setOnClickListener(clickListener);
- btn_right = (Button) findViewById(R.id.btn_right);
- btn_right.setOnClickListener(clickListener);
- String icurYear, icurMonth, icurDay;
- Calendar c = Calendar.getInstance();
- int curYear = c.get(Calendar.YEAR);
- if (date == null || date.length() < 10)
- {// 格式不正确
- int curMonth = c.get(Calendar.MONTH);
- int curDay = c.get(Calendar.DAY_OF_MONTH);
- icurYear = String.valueOf(curYear);
- icurMonth = String.valueOf(curMonth + 1);
- icurDay = String.valueOf(curDay);
- }
- else
- {// 年月日
- icurYear = date.substring(0, 4);
- icurMonth = date.substring(5, 7);
- icurDay = date.substring(8, 10);
- }
- year = (WheelView) findViewById(R.id.year);
- year.setAdapter(new NumericWheelAdapter(curYear - 2, curYear));
- // year.setLabel("年");
- year.setCurrentItem(Integer.parseInt(icurYear) - Integer.parseInt(year.getAdapter().getItem(0)));
- month = (WheelView) findViewById(R.id.month);
- month.setAdapter(new NumericWheelAdapter(1, 12));// "%02d"
- // month.setLabel("月");
- month.setCyclic(true);
- month.setCurrentItem(Integer.parseInt(icurMonth) - 1);
- int daysOfMounth = getDaysOfMounth();
- day = (WheelView) findViewById(R.id.day);
- day.setAdapter(new NumericWheelAdapter(1, daysOfMounth));
- // day.setLabel("日");
- day.setCyclic(true);
- day.setCurrentItem(Integer.parseInt(icurDay) - 1);
- OnWheelScrollListener scrollListener = new OnWheelScrollListener()
- {
- public void onScrollingStarted(WheelView wheel)
- {
- }
- public void onScrollingFinished(WheelView wheel)
- {
- int daysOfMounth = getDaysOfMounth();
- day.setAdapter(new NumericWheelAdapter(1, daysOfMounth));
- }
- };
- year.addScrollingListener(scrollListener);
- month.addScrollingListener(scrollListener);
- // day.addScrollingListener(scrollListener);
- }
- private int getDaysOfMounth()
- {
- int mMonth = Integer.parseInt(month.getAdapter().getItem(month.getCurrentItem()));
- switch (mMonth)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- return 31;
- case 4:
- case 6:
- case 9:
- case 11:
- return 30;
- case 2:
- int mYear = Integer.parseInt(year.getAdapter().getItem(year.getCurrentItem()));
- if (mYear % 4 == 0 && mYear % 100 != 0 || mYear % 400 == 0)
- {
- return 29;
- }
- else
- {
- return 28;
- }
- }
- return -1;
- }
- private void initValues()
- {
- }
- View.OnClickListener clickListener = new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- // TODO Auto-generated method stub
- switch (v.getId())
- {
- case R.id.btn_left:
- dismiss();
- break;
- case R.id.btn_right:
- String mYear = year.getAdapter().getItem(year.getCurrentItem());
- String mMonth = month.getAdapter().getItem(month.getCurrentItem());
- String mDay = day.getAdapter().getItem(day.getCurrentItem());
- if (mDay == null || mDay.length() == 0)
- {
- mDay = "1";
- }
- if (Integer.parseInt(mMonth) < 10)
- {
- mMonth = "0" + mMonth;
- }
- if (Integer.parseInt(mDay) < 10)
- {
- mDay = "0" + mDay;
- }
- if (onOKClickListener != null)
- {
- onOKClickListener.onOKClick(mYear, mMonth, mDay);
- }
- dismiss();
- break;
- default:
- break;
- }
- }
- };
- private OnOKClickListener onOKClickListener;
- public interface OnOKClickListener
- {
- public void onOKClick(String year, String month, String date);
- }
- public void setOnOKClickListener(OnOKClickListener onOKClickListener)
- {
- this.onOKClickListener = onOKClickListener;
- }
- }
DatePickerDialog的布局文件:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="250dp"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center"
- android:background="@drawable/bg_picker_dialog"
- >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:padding="8dp"
- >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_weight="1"
- android:gravity="center_horizontal"
- >
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- <com.widget.wheel.WheelView
- android:id="@+id/year"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginBottom="10dip"
- android:layout_marginTop="10dip"
- android:layout_weight="1"
- />
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_weight="1"
- android:gravity="center_horizontal"
- >
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- <com.widget.wheel.WheelView
- android:id="@+id/month"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="8dip"
- android:layout_weight="1" />
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_weight="1"
- android:gravity="center_horizontal"
- >
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- <com.widget.wheel.WheelView
- android:id="@+id/day"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="8dip"
- android:layout_weight="1" />
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:scaleType="fitCenter"
- />
- </LinearLayout>
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:background="@drawable/line_top_with_blue"
- >
- <Button
- android:id="@+id/btn_left"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:paddingBottom="8dip"
- android:paddingTop="8dip"
- android:text="@string/cancel"
- android:textColor="@android:color/black"
- android:textSize="@dimen/font_big"
- android:background="@drawable/bg_btn_trans_blue_with_no_corner"
- />
- <View
- android:layout_width="@dimen/line_width"
- android:layout_height="match_parent"
- android:background="@color/primary"
- />
- <Button
- android:id="@+id/btn_right"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:paddingBottom="8dip"
- android:paddingTop="8dip"
- android:text="@string/confirm"
- android:textColor="@android:color/black"
- android:textSize="@dimen/font_big"
- android:background="@drawable/bg_btn_trans_blue_with_no_corner"
- />
- </LinearLayout>
- </LinearLayout>
style:
- <style name="Theme_Dialog_NoTitle" parent="@android:style/Theme.Dialog">
- <item name="android:windowFrame">@null</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:windowIsTranslucent">true</item>
- <item name="android:backgroundDimEnabled">true</item>
- <item name="android:windowBackground">@android:color/transparent</item>
- </style>
使用:
- dialog = new DatePickerDialog(context, R.style.Theme_Dialog, btn_startDate.getText().toString().trim());
- dialog.setOnOKClickListener(new DatePickerDialog.OnOKClickListener()
- {
- @Override
- public void onOKClick(String year, String month, String date)
- {
- // TODO Auto-generated method stub
- //dosomething
- //btn_startDate.setText(year + "-" + month + "-" + date);
- }
- });
- dialog.show();
转载:http://gundumw100.iteye.com/blog/2220784