国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

輕松實現可擴展自定義的Android滾輪時間選擇控件

2019-12-12 05:57:50
字體:
來源:轉載
供稿:網友

項目需求中有個功能模塊需要用到時間選擇控件,但是android系統自帶的太丑了,只能自己優化下,結合WheelView實現滾輪選擇日期,好像網上也挺多這種文章的。但是適用范圍還是不同,希望這個能夠對需求相同的朋友有一定幫助。控件標題還有年月日時分秒這些可以自己控制是否顯示,先來看效果。 

1.有年月日時分的開始時間

2.只有年月日的結束時間

3.用于有時身份證到期的時間選擇(分為勾選長期和直接選擇時間兩種,另外長期后面自己也可以進行擴展)

4.項目結構

5.直接貼代碼,代碼里面注釋很詳細

 <span style="font-size:18px;"><span style="font-size:14px;">package com.andrew.datechoosewheelviewdemo;import android.app.Activity;import android.app.Dialog;import android.content.Context;import android.os.Looper;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import com.andrew.datechoosewheelviewdemo.widget.OnWheelChangedListener;import com.andrew.datechoosewheelviewdemo.widget.OnWheelScrollListener;import com.andrew.datechoosewheelviewdemo.widget.WheelView;import com.andrew.datechoosewheelviewdemo.widget.adapters.AbstractWheelTextAdapter;import java.util.ArrayList;import java.util.Calendar;/** * 使用說明:1.showLongTerm()是否顯示長期選項 * 2.setTimePickerGone隱藏時間選擇 * 3.接口DateChooseInterface * * 用于時間日期的選擇 * Created by liuhongxia on 2016/4/16. */public class DateChooseWheelViewDialog extends Dialog implements View.OnClickListener { //控件 private WheelView mYearWheelView; private WheelView mDateWheelView; private WheelView mHourWheelView; private WheelView mMinuteWheelView; private CalendarTextAdapter mDateAdapter; private CalendarTextAdapter mHourAdapter; private CalendarTextAdapter mMinuteAdapter; private CalendarTextAdapter mYearAdapter; private TextView mTitleTextView; private Button mSureButton; private Dialog mDialog; private Button mCloseDialog; private LinearLayout mLongTermLayout; private TextView mLongTermTextView; //變量 private ArrayList<String> arry_date = new ArrayList<String>(); private ArrayList<String> arry_hour = new ArrayList<String>(); private ArrayList<String> arry_minute = new ArrayList<String>(); private ArrayList<String> arry_year = new ArrayList<String>(); private int nowDateId = 0; private int nowHourId = 0; private int nowMinuteId = 0; private int nowYearId = 0; private String mYearStr; private String mDateStr; private String mHourStr; private String mMinuteStr; private boolean mBlnBeLongTerm = false;//是否需要長期 private boolean mBlnTimePickerGone = false;//時間選擇是否顯示 //常量 private final int MAX_TEXT_SIZE = 18; private final int MIN_TEXT_SIZE = 16; private Context mContext; private DateChooseInterface dateChooseInterface; public DateChooseWheelViewDialog(Context context, DateChooseInterface dateChooseInterface) { super(context); this.mContext = context; this.dateChooseInterface = dateChooseInterface; mDialog = new Dialog(context,R.style.dialog); initView(); initData(); } private void initData() { initYear(); initDate(); initHour(); initMinute(); initListener(); } /** * 初始化滾動監聽事件 */ private void initListener() { //年份***************************** mYearWheelView.addChangingListener(new OnWheelChangedListener() {  @Override  public void onChanged(WheelView wheel, int oldValue, int newValue) {  String currentText = (String) mYearAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mYearAdapter);  mYearStr = arry_year.get(wheel.getCurrentItem()) + "";  } }); mYearWheelView.addScrollingListener(new OnWheelScrollListener() {  @Override  public void onScrollingStarted(WheelView wheel) {  }  @Override  public void onScrollingFinished(WheelView wheel) {  String currentText = (String) mYearAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mYearAdapter);  } }); //日期******************** mDateWheelView.addChangingListener(new OnWheelChangedListener() {  @Override  public void onChanged(WheelView wheel, int oldValue, int newValue) {  String currentText = (String) mDateAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mDateAdapter);//  mDateCalendarTextView.setText(" " + arry_date.get(wheel.getCurrentItem()));  mDateStr = arry_date.get(wheel.getCurrentItem());  } }); mDateWheelView.addScrollingListener(new OnWheelScrollListener() {  @Override  public void onScrollingStarted(WheelView wheel) {  }  @Override  public void onScrollingFinished(WheelView wheel) {  String currentText = (String) mDateAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mDateAdapter);  } }); //小時*********************************** mHourWheelView.addChangingListener(new OnWheelChangedListener() {  @Override  public void onChanged(WheelView wheel, int oldValue, int newValue) {  String currentText = (String) mHourAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mHourAdapter);  mHourStr = arry_hour.get(wheel.getCurrentItem()) + "";  } }); mHourWheelView.addScrollingListener(new OnWheelScrollListener() {  @Override  public void onScrollingStarted(WheelView wheel) {  }  @Override  public void onScrollingFinished(WheelView wheel) {  String currentText = (String) mHourAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mHourAdapter);  } }); //分鐘******************************************** mMinuteWheelView.addChangingListener(new OnWheelChangedListener() {  @Override  public void onChanged(WheelView wheel, int oldValue, int newValue) {  String currentText = (String) mMinuteAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mMinuteAdapter);  mMinuteStr = arry_minute.get(wheel.getCurrentItem()) + "";  } }); mMinuteWheelView.addScrollingListener(new OnWheelScrollListener() {  @Override  public void onScrollingStarted(WheelView wheel) {  }  @Override  public void onScrollingFinished(WheelView wheel) {  String currentText = (String) mMinuteAdapter.getItemText(wheel.getCurrentItem());  setTextViewStyle(currentText, mMinuteAdapter);  } }); } /** * 初始化分鐘 */ private void initMinute() { Calendar nowCalendar = Calendar.getInstance(); int nowMinite = nowCalendar.get(Calendar.MINUTE); arry_minute.clear(); for (int i = 0; i <= 59; i++) {  arry_minute.add(i + "");  if (nowMinite == i){  nowMinuteId = arry_minute.size() - 1;  } } mMinuteAdapter = new CalendarTextAdapter(mContext, arry_minute, nowMinuteId, MAX_TEXT_SIZE, MIN_TEXT_SIZE); mMinuteWheelView.setVisibleItems(5); mMinuteWheelView.setViewAdapter(mMinuteAdapter); mMinuteWheelView.setCurrentItem(nowMinuteId); mMinuteStr = arry_minute.get(nowMinuteId) + ""; setTextViewStyle(mMinuteStr, mMinuteAdapter); } /** * 初始化時間 */ private void initHour() { Calendar nowCalendar = Calendar.getInstance(); int nowHour = nowCalendar.get(Calendar.HOUR_OF_DAY); arry_hour.clear(); for (int i = 0; i <= 23; i++) {  arry_hour.add(i + "");  if (nowHour == i){  nowHourId = arry_hour.size() - 1;  } } mHourAdapter = new CalendarTextAdapter(mContext, arry_hour, nowHourId, MAX_TEXT_SIZE, MIN_TEXT_SIZE); mHourWheelView.setVisibleItems(5); mHourWheelView.setViewAdapter(mHourAdapter); mHourWheelView.setCurrentItem(nowHourId); mHourStr = arry_hour.get(nowHourId) + ""; setTextViewStyle(mHourStr, mHourAdapter); } /** * 初始化年 */ private void initYear() { Calendar nowCalendar = Calendar.getInstance(); int nowYear = nowCalendar.get(Calendar.YEAR); arry_year.clear(); for (int i = 0; i <= 99; i++) {  int year = nowYear -30 + i;  arry_year.add(year + "年");  if (nowYear == year) {  nowYearId = arry_year.size() - 1;  } } mYearAdapter = new CalendarTextAdapter(mContext, arry_year, nowYearId, MAX_TEXT_SIZE, MIN_TEXT_SIZE); mYearWheelView.setVisibleItems(5); mYearWheelView.setViewAdapter(mYearAdapter); mYearWheelView.setCurrentItem(nowYearId); mYearStr = arry_year.get(nowYearId); } private void initView() { View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_date_choose, null); mDialog.setContentView(view); mYearWheelView = (WheelView) view.findViewById(R.id.year_wv); mDateWheelView = (WheelView) view.findViewById(R.id.date_wv); mHourWheelView = (WheelView) view.findViewById(R.id.hour_wv); mMinuteWheelView = (WheelView) view.findViewById(R.id.minute_wv); mTitleTextView = (TextView) view.findViewById(R.id.title_tv); mSureButton = (Button) view.findViewById(R.id.sure_btn); mCloseDialog = (Button) view.findViewById(R.id.date_choose_close_btn); mLongTermLayout = (LinearLayout) view.findViewById(R.id.long_term_layout); mLongTermTextView = (TextView) view.findViewById(R.id.long_term_tv); mSureButton.setOnClickListener(this); mCloseDialog.setOnClickListener(this); mLongTermTextView.setOnClickListener(this); } /** * 初始化日期 */ private void initDate() { Calendar nowCalendar = Calendar.getInstance(); int nowYear = nowCalendar.get(Calendar.YEAR); arry_date.clear(); setDate(nowYear); mDateAdapter = new CalendarTextAdapter(mContext, arry_date, nowDateId, MAX_TEXT_SIZE, MIN_TEXT_SIZE); mDateWheelView.setVisibleItems(5); mDateWheelView.setViewAdapter(mDateAdapter); mDateWheelView.setCurrentItem(nowDateId); mDateStr = arry_date.get(nowDateId); setTextViewStyle(mDateStr, mDateAdapter); } public void setDateDialogTitle(String title) { mTitleTextView.setText(title); } public void setTimePickerGone(boolean isGone) { mBlnTimePickerGone = isGone; if (isGone) {  LinearLayout.LayoutParams yearParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,   LinearLayout.LayoutParams.WRAP_CONTENT);  yearParams.rightMargin = 22;  LinearLayout.LayoutParams dateParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,   LinearLayout.LayoutParams.WRAP_CONTENT);  mYearWheelView.setLayoutParams(yearParams);  mDateWheelView.setLayoutParams(dateParams);  mHourWheelView.setVisibility(View.GONE);  mMinuteWheelView.setVisibility(View.GONE); } else {  mHourWheelView.setVisibility(View.VISIBLE);  mMinuteWheelView.setVisibility(View.VISIBLE); } } public void showLongTerm(boolean show) { if (show) {  mLongTermLayout.setVisibility(View.VISIBLE); } else {  mLongTermLayout.setVisibility(View.GONE); } } /** * 將改年的所有日期寫入數組 * @param year */ private void setDate(int year){ boolean isRun = isRunNian(year); Calendar nowCalendar = Calendar.getInstance(); int nowMonth = nowCalendar.get(Calendar.MONTH) + 1; int nowDay = nowCalendar.get(Calendar.DAY_OF_MONTH); for (int month = 1; month <= 12; month++){  switch (month){  case 1:  case 3:  case 5:  case 7:  case 8:  case 10:  case 12:   for (int day = 1; day <= 31; day++){   arry_date.add(month + "月" + day + "日");   if (month == nowMonth && day == nowDay){    nowDateId = arry_date.size() - 1;   }   }   break;  case 2:   if (isRun){   for (int day = 1; day <= 29; day++){    arry_date.add(month + "月" + day + "日");    if (month == nowMonth && day == nowDay){    nowDateId = arry_date.size() - 1;    }   }   }else {   for (int day = 1; day <= 28; day++){    arry_date.add(month + "月" + day + "日");    if (month == nowMonth && day == nowDay){    nowDateId = arry_date.size() - 1;    }   }   }   break;  case 4:  case 6:  case 9:  case 11:   for (int day = 1; day <= 30; day++){   arry_date.add(month + "月" + day + "日");   if (month == nowMonth && day == nowDay){    nowDateId = arry_date.size() - 1;   }   }   break;  default:   break;  } } } /** * 判斷是否是閏年 * @param year * @return */ private boolean isRunNian(int year){ if(year % 4 == 0 && year % 100 !=0 || year % 400 == 0){  return true; }else {  return false; } } /** * 設置文字的大小 * @param curriteItemText * @param adapter */ public void setTextViewStyle(String curriteItemText, CalendarTextAdapter adapter) { ArrayList<View> arrayList = adapter.getTestViews(); int size = arrayList.size(); String currentText; for (int i = 0; i < size; i++) {  TextView textvew = (TextView) arrayList.get(i);  currentText = textvew.getText().toString();  if (curriteItemText.equals(currentText)) {  textvew.setTextSize(MAX_TEXT_SIZE);  textvew.setTextColor(mContext.getResources().getColor(R.color.text_10));  } else {  textvew.setTextSize(MIN_TEXT_SIZE);  textvew.setTextColor(mContext.getResources().getColor(R.color.text_11));  } } } @Override public void onClick(View v) { switch (v.getId()) {  case R.id.sure_btn://確定選擇按鈕監聽  if (mBlnTimePickerGone) {   dateChooseInterface.getDateTime(strTimeToDateFormat(mYearStr, mDateStr), mBlnBeLongTerm);  } else {   dateChooseInterface.getDateTime(strTimeToDateFormat(mYearStr, mDateStr , mHourStr , mMinuteStr), mBlnBeLongTerm);  }  dismissDialog();  break;  case R.id.date_choose_close_btn://關閉日期選擇對話框  dismissDialog();  break;  case R.id.long_term_tv://選擇長期時間監聽  if (!mBlnBeLongTerm) {   mLongTermTextView.setBackgroundResource(R.drawable.gouxuanok);   mBlnBeLongTerm = true;  } else {   mLongTermTextView.setBackgroundResource(R.drawable.gouxuanno);   mBlnBeLongTerm = false;  }  default:  break; } } /** * 對話框消失 */ private void dismissDialog() { if (Looper.myLooper() != Looper.getMainLooper()) {  return; } if (null == mDialog || !mDialog.isShowing() || null == mContext  || ((Activity) mContext).isFinishing()) {  return; } mDialog.dismiss(); this.dismiss(); } /** * 顯示日期選擇dialog */ public void showDateChooseDialog() { if (Looper.myLooper() != Looper.getMainLooper()) {  return; } if (null == mContext || ((Activity) mContext).isFinishing()) {  // 界面已被銷毀  return; } if (null != mDialog) {  mDialog.show();  return; } if (null == mDialog) {  return; } mDialog.setCanceledOnTouchOutside(true); mDialog.show(); } /** * xx年xx月xx日xx時xx分轉成yyyy-MM-dd HH:mm * @param yearStr * @param dateStr * @param hourStr * @param minuteStr * @return */ private String strTimeToDateFormat(String yearStr, String dateStr, String hourStr, String minuteStr) { return yearStr.replace("年", "-") + dateStr.replace("月", "-").replace("日", " ")  + hourStr + ":" + minuteStr; } private String strTimeToDateFormat(String yearStr, String dateStr) { return yearStr.replace("年", "-") + dateStr.replace("月", "-").replace("日", ""); } /** * 滾輪的adapter */ private class CalendarTextAdapter extends AbstractWheelTextAdapter { ArrayList<String> list; protected CalendarTextAdapter(Context context, ArrayList<String> list, int currentItem, int maxsize, int minsize) {  super(context, R.layout.item_birth_year, R.id.tempValue, currentItem, maxsize, minsize);  this.list = list; } @Override public View getItem(int index, View cachedView, ViewGroup parent) {  View view = super.getItem(index, cachedView, parent);  return view; } @Override public int getItemsCount() {  return list.size(); } @Override protected CharSequence getItemText(int index) {  String str = list.get(index) + "";  return str; } } /** * 回調選中的時間(默認時間格式"yyyy-MM-dd HH:mm:ss") */ public interface DateChooseInterface{ void getDateTime(String time, boolean longTimeChecked); }}</span></span>

 6.MainActivity里面使用

<span style="font-size:18px;"><span style="font-size:14px;">package com.andrew.datechoosewheelviewdemo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements View.OnClickListener { private Button mStartDateButton; private Button mEndDateButton; private Button mDateValidButton; private TextView mShowContentTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mStartDateButton = (Button) this.findViewById(R.id.start_date_btn); mEndDateButton = (Button) this.findViewById(R.id.end_date_btn); mDateValidButton = (Button) this.findViewById(R.id.date_valid_btn); mShowContentTextView = (TextView) this.findViewById(R.id.show_content_tv); mStartDateButton.setOnClickListener(this); mEndDateButton.setOnClickListener(this); mDateValidButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) {  case R.id.start_date_btn://開始時間  DateChooseWheelViewDialog startDateChooseDialog = new DateChooseWheelViewDialog(MainActivity.this, new DateChooseWheelViewDialog.DateChooseInterface() {   @Override   public void getDateTime(String time, boolean longTimeChecked) {   mShowContentTextView.setText(time);   }  });  startDateChooseDialog.setDateDialogTitle("開始時間");  startDateChooseDialog.showDateChooseDialog();  break;  case R.id.end_date_btn://結束時間  DateChooseWheelViewDialog endDateChooseDialog = new DateChooseWheelViewDialog(MainActivity.this,   new DateChooseWheelViewDialog.DateChooseInterface() {    @Override    public void getDateTime(String time, boolean longTimeChecked) {    mShowContentTextView.setText(time);    }   });  endDateChooseDialog.setTimePickerGone(true);  endDateChooseDialog.setDateDialogTitle("結束時間");  endDateChooseDialog.showDateChooseDialog();  break;  case R.id.date_valid_btn://身份證有效期  DateChooseWheelViewDialog dateValidChooseDialog = new DateChooseWheelViewDialog(MainActivity.this,   new DateChooseWheelViewDialog.DateChooseInterface() {    @Override    public void getDateTime(String time, boolean longTimeChecked) {    if (longTimeChecked) {     mShowContentTextView.setText("長期 ");    } else {     mShowContentTextView.setText(time);    }    }   });  dateValidChooseDialog.setTimePickerGone(true);  dateValidChooseDialog.showLongTerm(true);  dateValidChooseDialog.setDateDialogTitle("身份證到期時間");  dateValidChooseDialog.showDateChooseDialog();  break;  default:  break; } }}</span></span>

代碼下載地址:
github:https://github.com/hongxialiu/DateChooseWheelViewDemo 
源碼下載: WheelView滾輪時間選擇控件

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景泰县| 桂林市| 小金县| 石景山区| 砀山县| 普定县| 乐都县| 马公市| 唐河县| 长乐市| 周宁县| 德江县| 贺州市| 双辽市| 吉首市| 淄博市| 齐河县| 潜山县| 朝阳市| 五家渠市| 夏河县| 大方县| 遵化市| 南昌市| 百色市| 高邮市| 普宁市| 鄂托克旗| 安多县| 慈溪市| 合山市| 毕节市| 石首市| 榆树市| 栾城县| 卓尼县| 克东县| 湘潭市| 行唐县| 牡丹江市| 山丹县|