2017-10-09 122 views
0

我有我的應用程序的日期選擇器,但我想刪除/隱藏datepicker的一天。僅顯示月份和年份。注意:我正在使用xamarin android。刪除/隱藏日期選擇器

這是我的日期選擇器擴展類:

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<DateTime> _dateSelectedHandler = delegate { }; 

    public static DatePickerFragment NewInstance(Action<DateTime> 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, 
     currently.Month - 1, 
     currently.Day); 

     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); 

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

這是我的Activity類:

private void DateSelect_OnClick(object sender, EventArgs eventArgs) 
{ 
    DatePickerFragment frag = DatePickerFragment.NewInstance(delegate (DateTime time) 
    { 
    _dateDisplay.Text = time.ToLongDateString(); 

    }); 
    frag.Show(FragmentManager, DatePickerFragment.TAG); 
} 

謝謝!

回答

1

刪除/隱藏日期選擇一天

我測試阿克沙伊Raiyani的代碼,它工作正常,我的模擬器(安卓6.0,7.0 ,7.1),但它沒有工作的一些設備,例如我的MI 5,Android 7.0,這很奇怪。

因此,我實現了嵌入兩個NumberPickersDialogFragment,它適用於大多數Android設備。

MonthYearPickerDialog

public class MonthYearPickerDialog : DialogFragment 
{ 
    private const int MAX_YEAR = 2099; 
    private DatePickerDialog.IOnDateSetListener listener; 

    public void setListener(DatePickerDialog.IOnDateSetListener listener) 
    { 
     this.listener = listener; 
    } 

    public override Dialog OnCreateDialog(Bundle savedInstanceState) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(Activity); 
     // Get the layout inflater 
     LayoutInflater inflater = Activity.LayoutInflater; 

     Calendar cal = Calendar.Instance; 

     View dialog = inflater.Inflate(Resource.Layout.date_picker_dialog, null); 
     NumberPicker monthPicker = (NumberPicker)dialog.FindViewById(Resource.Id.picker_month); 
     NumberPicker yearPicker = (NumberPicker)dialog.FindViewById(Resource.Id.picker_year); 

     monthPicker.MinValue = 1; 
     monthPicker.MaxValue = 12; 
     monthPicker.Value = cal.Get(CalendarField.Month) + 1; 

     int year = cal.Get(CalendarField.Year); 
     yearPicker.MinValue = year; 
     yearPicker.MaxValue = MAX_YEAR; 
     yearPicker.Value = year; 

     builder.SetView(dialog) 
      .SetPositiveButton("Ok", (sender,e)=> 
      { 
       listener.OnDateSet(null, yearPicker.Value, monthPicker.Value, 0); 
      }) 
      .SetNegativeButton("Cancel", (sender, e) => 
      { 
       this.Dialog.Cancel(); 
      }); 

     return builder.Create(); 
    } 
} 

date_picker_dialog.axml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:orientation="horizontal"> 

    <NumberPicker 
     android:id="@+id/picker_month" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="20dp" 
     android:layout_marginRight="20dp"> 

    </NumberPicker> 

    <NumberPicker 
     android:id="@+id/picker_year" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

    </NumberPicker> 

    </LinearLayout> 
</LinearLayout> 

當你要使用它:

MonthYearPickerDialog pd = new MonthYearPickerDialog(); 
pd.setListener(this); 
pd.Show(FragmentManager, "MonthYearPickerDialog"); 

Effect

0

檢查此代碼。其完美的作品對我來說

private DatePickerDialog createDialogWithoutDateField() { 
    myCalendar = Calendar.getInstance(); 
    date = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
           int dayOfMonth) { 
      // TODO Auto-generated method stub 
      myCalendar.set(Calendar.YEAR, year); 
      myCalendar.set(Calendar.MONTH, monthOfYear); 
      myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
      updateLabel(); 
     } 
    }; 


    dlg = new DatePickerDialog(ProfilePaymentInfo.this, date, 
      myCalendar.get(Calendar.YEAR), 
      myCalendar.get(Calendar.MONTH), 
      myCalendar.get(Calendar.DAY_OF_MONTH)) { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      int day = getContext().getResources().getIdentifier("android:id/day", null, null); 

      myCalendar.add(Calendar.MONTH, 0); 
      myCalendar.add(Calendar.YEAR, 0); 
      dlg.getDatePicker().setMinDate(myCalendar.getTimeInMillis()); 
      if (day != 0) { 
       View dayPicker = findViewById(day); 
       if (dayPicker != null) { 
        //Set Day view visibility Off/Gone 
        dayPicker.setVisibility(View.GONE); 
       } 
      } 
     } 
    }; 
    return dlg; 
} 

enter image description here

+0

但在xamarin android中,OnCreate方法不起作用。 – Kmmp

相關問題