2017-04-19 3 views
0

저는 Xamarin.android를 처음 사용합니다. 여기 내 프로젝트에서 xamarin.android에서 DatePickerDialog를 사용하고 있습니다. 올해의 선택을 제한하고 싶습니다. 나는 나이 제한을 dob에 대해 21 년으로 설정해야한다는 것을 의미합니다. 그래서 사용자는 현재 날짜로부터 21 년을 초과하는 나이를 선택할 수 없습니다. 현재 연도가 2017 일 경우 사용자는 1996 년 이후로 선택할 수 없어야합니다. 1996 년 이후의 연도를 선택하면 1996에 다시 와야합니다.xamarin.android의 DatePickerDialog에서 1 년 선택 제한 설정

edittext를 클릭 할 때 DatePickerFragment 클래스를 호출합니다. 여기 코드를 사용했습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Util; 
using Android.Views; 
using Android.Widget; 

namespace MobileApplication.Droid 
{ 
    public class DatePickerFragment : DialogFragment, 
            DatePickerDialog.IOnDateSetListener 
    { 
     // TAG can be any string of your choice. 
     public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper(); 

     // Initialize this value to prevent NullReferenceExceptions. 
     Action<string> _dateSelectedHandler = delegate { }; 

     public static DatePickerFragment NewInstance(Action<string> onDateSelected) 
     { 
      DatePickerFragment frag = new DatePickerFragment(); 
      frag._dateSelectedHandler = onDateSelected; 
      return frag; 
     } 

     public override Dialog OnCreateDialog(Bundle savedInstanceState) 
     { 
      DateTime currently = DateTime.Now; 
      DatePickerDialog dialog = new DatePickerDialog(Activity, 
                  this, 
                  currently.Year - 21, 
                  currently.Month, 
                  currently.Day); 
      dialog.DatePicker.MaxDateTime.DayOfYear.Equals(currently.Year - 21); 
      return dialog; 
     } 

     public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
     { 
      // Note: monthOfYear is a value between 0 and 11, not 1 and 12! 
      //DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth); 
      string selectedDate = (monthOfYear + 1).ToString().PadLeft(2, '0') + "/" + (dayOfMonth).ToString().PadLeft(2, '0') + "/" + year.ToString(); 

      //Log.Debug(TAG, selectedDate.ToLongDateString()); 
      Log.Debug(TAG, selectedDate); 
      _dateSelectedHandler(selectedDate); 
     } 
    } 
} 

edittext 클릭시 연도는 (현재 연도 - 21)로 설정됩니다. 하지만 사용자는 날짜 선택이 잘 작동되는 약간의 변경을 수행하여,이 Link에 따르면 ..이 일을 달성하기 위해 그 year..how 이상 선택 그래서

+0

는 21 년 동안 사람들을 명확히하시기 바랍니다 (21)의 연령 제한을 설정해야합니다 이상 등록 할 수 있습니다 또는 유일한 사람들과 .. 난 내 앞의 코드에 대한 변경 사항입니다 21이 등록 할 수 있습니다. –

+0

예. 할 수는 있지만 .. 선택 자체를 제한하고 싶습니다. –

+0

datepicker는 21 년 이상 선택해서는 안됩니다. –

답변

1
DateTime currently = DateTime.Now; 
      DatePickerDialog dialog = new DatePickerDialog(this, delegate { }, currently.Year -21, currently.Month-1, currently.Day); 

      dialog.DatePicker.MaxDate = (long)DateTime.Now.AddYears(-21) 
       .ToUniversalTime() 
       .Subtract(DateTime.MinValue.AddYears(1969)) 
       .TotalMilliseconds; 
      dialog.Show(); 
+0

그것은 잘 작동하지만 .. 하나의 변화 ..'DatePickerDialog 대화 상자 = 새로운 DatePickerDialog (this.Activity, this, Year - 21, currently.Month - 1, currently.Day);'..thank u ..! !! !! –

0

를 제한되지 않습니다. 지금은 사용자가 21 세 이상으로 선택할 수 없다는 의미입니다.

그래서 이들은

public override Dialog OnCreateDialog(Bundle savedInstanceState) 
     { 
      DateTime currently = DateTime.Now; 
      DatePickerDialog dialog = new DatePickerDialog(Activity, 
                  this, 
                  currently.Year - 21, 
                  currently.Month, 
                  currently.Day); 

      dialog.DatePicker.MaxDate = new Java.Util.Date().Time - 662300000000; // 662300000000 => 1 year is converted to milliseconds.. 
      return dialog; 
     }