本人利用WheelView写的一个DatePickerDialog
(还有一个TimePickerDialog,本人忘了在写在哪个项目里了,等找到了也贴上来)
先看图,有个直观的了解
DatePickerDialog代码:
DatePickerDialog的布局文件:
style:
使用:
WheelView类见附件,直接加入到你的工程中即可
(还有一个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();
WheelView类见附件,直接加入到你的工程中即可