2015-10-15 30 views
6

Tôi đang làm việc trên một ứng dụng mà tôi đang sử dụng bộ chọn ngày và giờ tùy chỉnh. Tôi đã tạo một hộp thoại và bên trong là tôi hiện đang hiển thị bộ chọn ngày và giờ tương ứng, tôi muốn đặt giới hạn tối thiểu và tối đa cho bộ chọn ngày. Chẳng hạn như người ta không thể chọn ngày trước đó từ hôm nay và không quá một tháng trước. Đây là mã của tôiLàm cách nào để đặt giới hạn tối thiểu và tối đa cho bộ chọn ngày trong Android?

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      final DatePicker picker = new DatePicker(getActivity()); 
      try { 
       Field f[] = picker.getClass().getDeclaredFields(); 
       for (Field field : f) { 
        if (field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner")) { 
         field.setAccessible(true); 
         Object yearPicker = new Object(); 
         yearPicker = field.get(picker); 
         ((View) yearPicker).setVisibility(View.GONE); 
        } 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      picker.setCalendarViewShown(false); 
      picker.setMinDate(new Date().getTime()); 

      builder.setTitle("Please select date on which you would be leaving :") 
        .setView(picker) 
        .setPositiveButton("OK", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 
            SimpleDateFormat parseFormat = new SimpleDateFormat("EEE dd MMM"); 
            Date date1 = new Date(); 
            date1.setDate(picker.getDayOfMonth()); 
            date1.setMonth(picker.getMonth()); 
            final String s = parseFormat.format(date1); 
            Log.e("DATE", s); 
            SimpleDateFormat sdf=new SimpleDateFormat("MM-dd-yyyy"); 
            Date date2=new Date(); 
            date2.setDate(picker.getDayOfMonth()); 
            date2.setMonth(picker.getMonth()); 
            final String s2=sdf.format(date2); 


            //Time picker 
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
            final TimePicker picker = new TimePicker(getActivity()); 
            picker.setIs24HourView(true); 
            builder.setTitle("Please select time at which you would be leaving :") 
              .setView(picker) 
              .setPositiveButton("OK", 
                new DialogInterface.OnClickListener() { 
                 public void onClick(DialogInterface dialog, int whichButton) { 
                  int hour = picker.getCurrentHour(); 
                  int minute = picker.getCurrentMinute(); 
                  leaving.setTextSize(14); 

                  leaving.setText(s + " " + hour + ":" + minute); 
                  inTime=s2+" "+hour+":"+minute; 
                  Log.e("inTime ",inTime); 
                 } 
                }) 
              .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
               public void onClick(DialogInterface dialog, int whichButton) { 
                leaving.setText(""); 
                inTime=""; 
                dialog.dismiss(); 
               } 
              }).create().show(); 
            //Time picker 
           } 
          } 
        ) 
        .setNegativeButton("Cancel", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 
            leaving.setText(""); 
            inTime=""; 
            dialog.dismiss(); 
           } 
          } 
        ) 
        .create().show(); 

Xin vui lòng trợ giúp. Cảm ơn bạn

+0

để thiết lập ngày tối thiểu mà bạn có thể sử dụng 'datePickerobject.setMinDate (System.currentTimeMillis() - 1000);' –

+0

cho tối đa 'datePickerobject.setMaxDate (lastdate_converted_in_long); ' –

Trả lời

8

Hãy thử điều này, Hiển thị từ hôm nay đến 5 năm tiếp theo trong hộp thoại datepicker.

public class MainActivity extends Activity { 

    TextView txtDatePicker; 
    Calendar cal,cal1; 
    long maxDate; 
    Date date; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     cal = Calendar.getInstance(); 
     cal1 = Calendar.getInstance(); 

     txtDatePicker = (TextView) findViewById(R.id.txtDatePicker); 
     txtDatePicker.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       DatePickerDialog dialog = new DatePickerDialog(MainActivity.this, new OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { 
         // TODO Auto-generated method stub 
         Toast.makeText(MainActivity.this, ""+arg1+"/"+(arg2+1)+"/"+arg3, Toast.LENGTH_SHORT).show(); 
        } 
      }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); 
      dialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
      cal1.add(Calendar.YEAR, 5); 
      dialog.getDatePicker().setMaxDate(cal1.getTimeInMillis()); 
      dialog.show(); 
     } 
    }); 
    } 
} 
+0

Thanx Nó hiện đang hoạt động – ManishNegi

1

Sử dụng mã này.
Tôi sử dụng mã này trong đơn đăng ký của mình.

// Global declaration 

    Calendar preferDate1 = new GregorianCalendar(); 
    Calendar preferDate2 = new GregorianCalendar(); 
    final Calendar c = Calendar.getInstance(); 
    year = c.get(Calendar.YEAR); 
    month = c.get(Calendar.MONTH); 
    day = c.get(Calendar.DAY_OF_MONTH); 
    private int year, month, day; 


    // here preferredDate1 and preferredDate2 are textview 
    preferredDate1.setOnClickListener(new OnClickListener() { 

       @SuppressLint("NewApi") 
       @Override 
       public void onClick(View v) { 
        DatePickerDialog dp = new DatePickerDialog(MainActivity.this, prefferedDate1Picker, preferDate1 
          .get(Calendar.YEAR), preferDate1.get(Calendar.MONTH), preferDate1.get(Calendar.DAY_OF_MONTH)); 
        dp.getDatePicker().setMinDate(c.getTimeInMillis()); 
        dp.show(); 
       } 
      }); 

    private final DatePickerDialog.OnDateSetListener prefferedDate1Picker = new DatePickerDialog.OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
       preferDate1 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay); 
       preferredDate2.setText(""); 
       preferredDate1.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" 
         + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) 
         + "/" + selectedYear); 

      } 
     }; 


// This will set date based on preferredDate1 
// change here according to your need. If you want to add or remove one month then set based on data. In this I add one day in second data picker. 
preferredDate2.setOnClickListener(new OnClickListener() { 

      @SuppressLint("NewApi") 
      @Override 
      public void onClick(View v) { 
        DatePickerDialog dp2 = new DatePickerDialog(MainActivity.this, prefferedDate2Picker, preferDate2 
          .get(Calendar.YEAR), preferDate2.get(Calendar.MONTH), preferDate2.get(Calendar.DAY_OF_MONTH)); 

        long mili = preferDate1.getTimeInMillis() + 86400000L; 
        dp2.getDatePicker().setMinDate(mili); 
        dp2.show(); 

      } 
     }); 

     private final DatePickerDialog.OnDateSetListener prefferedDate2Picker = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
      preferDate2 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay+1); 
      preferredDate2.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" 
        + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) 
        + "/" + selectedYear); 

     } 
    }; 
+0

Cảm ơn đã phản ứng. Tôi đang sử dụng hàm setMinDate(). Nó hiển thị các ngày trước trong màu tô bóng nhưng nếu tôi nhấp vào những ngày mà chúng đang được chọn. Và hãy cho tôi biết cách sử dụng setMaxDate() trong khoảng thời gian một tháng – ManishNegi

+0

Tôi đã thực hiện một số thay đổi trong hiện tại và hiện đang làm việc cho MinDate nhưng cách thêm ngày tối đa? – ManishNegi

+0

setMaxDate() không hoạt động? –

Các vấn đề liên quan