2013-08-05 95 views
2

目前我使用的日期選擇器原生一個,但我想改變它,我只需要一個月,一年 如何修改這個我的代碼,這樣的方式是繼隱藏日期

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     // set date picker as current date 
     return new DatePickerDialog(this, datePickerListener, 
        year, month,day); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener 
      = new DatePickerDialog.OnDateSetListener() { 

    // when dialog box is closed, below method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 

    /* year = selectedYear; 
     month = selectedMonth; 
     day = selectedDay;*/ 
     mynewYear=selectedYear; 
     myNewMonth=selectedMonth; 
     myNewDay=selectedDay; 
     try { 
      checkDate(); 
     } catch (NoSuchAlgorithmException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     /*time_date_TV.setText(new StringBuilder() 
      .append(myNewMonth + 1).append("/") 
      .append(myNewDay).append("/").append(mynewYear)); 
       */ 





    } 
}; 

我只是想隱藏日期部分的任何幫助將非常感謝全

+0

也許此代碼示例幫助:https://github.com/bendemboski/DateSlider/tree/develop/src/com/googlecode/android/widgets/DateSlider –

回答

2

腦半天猛衝之後,我發現這個解決方案,這可能幫助其他有這樣的場景

我的日期選擇器自定義類此之後將更新日期標題每個時間E用戶改變月/年

class CustomDatePickerDialog extends DatePickerDialog implements OnDateChangedListener { 

private DatePickerDialog mDatePicker; 

@SuppressLint("NewApi") 
public CustomDatePickerDialog(Context context,int theme, OnDateSetListener callBack, 
     int year, int monthOfYear, int dayOfMonth) { 
    super(context, theme,callBack, year, monthOfYear, dayOfMonth); 
    mDatePicker = new DatePickerDialog(context,theme,callBack, year, monthOfYear, dayOfMonth); 

    mDatePicker.getDatePicker().init(2013, 7, 16, this); 

    updateTitle(year, monthOfYear); 

} 
public void onDateChanged(DatePicker view, int year, 
     int month, int day) { 
    updateTitle(year, month); 
} 
private void updateTitle(int year, int month) { 
    Calendar mCalendar = Calendar.getInstance(); 
    mCalendar.set(Calendar.YEAR, year); 
    mCalendar.set(Calendar.MONTH, month); 
//  mCalendar.set(Calendar.DAY_OF_MONTH, day); 
     mDatePicker.setTitle(getFormat().format(mCalendar.getTime())); 

} 

public DatePickerDialog getPicker(){ 

    return this.mDatePicker; 
} 
    /* 
    * the format for dialog tile,and you can override this method 
    */ 
public SimpleDateFormat getFormat(){ 
    return new SimpleDateFormat("MMM, yyyy"); 
}; 
} 

及以下是將隱藏的日期選擇器對話框中的天數及其微調代碼

CustomDatePickerDialog dp = new CustomDatePickerDialog(context, android.R.style.Theme_Holo_Light_Dialog, datePickerListener, year, month, day); 

       DatePickerDialog obj = dp.getPicker(); 
       try{ 
         Field[] datePickerDialogFields = obj.getClass().getDeclaredFields(); 
         for (Field datePickerDialogField : datePickerDialogFields) { 
          if (datePickerDialogField.getName().equals("mDatePicker")) { 
           datePickerDialogField.setAccessible(true); 
           DatePicker datePicker = (DatePicker) datePickerDialogField.get(obj); 
           Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); 
           for (Field datePickerField : datePickerFields) { 
            if ("mDayPicker".equals(datePickerField.getName()) || "mDaySpinner".equals(datePickerField 
             .getName())) { 
             datePickerField.setAccessible(true); 
             Object dayPicker = new Object(); 
             dayPicker = datePickerField.get(datePicker); 
             ((View) dayPicker).setVisibility(View.GONE); 
            } 
           } 
           } 

          } 
         }catch(Exception ex){ 
         } 
       obj.show(); 
+2

使用此方法時要非常小心。您正在有效地將您的代碼綁定到DatePickerDialog的特定實現。如果在下一個小版本中Google改變了它的實現(例如,重命名變量'mDatePicker'),你的代碼就會中斷。此外,如果它適用於谷歌Android系統,這並不意味着它可以在其他設備上工作,因爲不同的製造商往往會在實施過程中改變事情。我發現這是使用類似技術時的難題。 –

+0

與你同意將進一步優化 –

+0

同意Aleks G.他是絕對正確的,這個定製不會適用於OS 5.0或更高版本! – Omama

2

簡單的方式 - 只是隱藏NumberPicker在datePickerDialog 這裏從我的項目代碼

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     final Calendar c = Calendar.getInstance(); 

     DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, c.get(Calendar.YEAR), 
       c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 

     dialog.getDatePicker().setSpinnersShown(true); 

     // hiding calendarview and daySpinner in datePicker 
      dialog.getDatePicker().setCalendarViewShown(false); 

      LinearLayout pickerParentLayout = (LinearLayout) dialog.getDatePicker().getChildAt(0); 

      LinearLayout pickerSpinnersHolder = (LinearLayout) pickerParentLayout.getChildAt(0); 

      pickerSpinnersHolder.getChildAt(0).setVisibility(View.GONE); 


     dialog.setTitle("Pick a date"); 
     return dialog; 
    } 

    public void onDateSet(DatePicker view, int yy, int mm, int dd) { 

     Calendar result = Calendar.getInstance(); 

     result.set(Calendar.YEAR, yy); 
     result.set(Calendar.MONDAY, mm); 
     result.set(Calendar.DAY_OF_MONTH, dd); 

     if (currentWeek != -1) { 
      updateDateWeek(result.getTimeInMillis()); 
     } else { 
      updateDate(result.getTimeInMillis()); 
     } 
    } 
} 

顯示選擇器只是調用

DialogFragment newFragment = new SelectDateFragment(); 
newFragment.show(getActivity().getSupportFragmentManager(), "DatePicker"); 
+0

愚蠢的問題,當然 –

+1

我會建議pickerSpinnersHolder.findViewById(R.id.day).setVisibility(View.GONE);基於mDaySpinner =(NumberPicker)findViewById(R.id.day);從android源代碼,因爲當你的位置是美國,這段代碼隱藏月份微調。 – Heitara

2

這可能對你有用..如果你只爲英語而做......也可以根據要求進行更改。

Locale.setDefault(Locale.UK); 

這將使日期選取器出現在表單DD/MM/YYYY

下面的代碼刪除一天spiner

LinearLayout pickerParentLayout = 
(LinearLayout) mDatePicker.getChildAt(0); 
LinearLayout pickerSpinnersHolder = (LinearLayout) pickerParentLayout.getChildAt(0); 
NumberPicker picker = (NumberPicker) pickerSpinnersHolder.getChildAt(0); 
picker.setVisibility(View.GONE); 
1

此嘗試幾種不同的方法後,爲我工作。

datePicker = (DatePicker) findViewById(R.id.date_picker); 

public void hideDay() { 
    try { 
     java.lang.reflect.Field[] f = datePicker.getClass().getDeclaredFields(); 
     for (java.lang.reflect.Field field : f) { 
      if (field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")) { 
       field.setAccessible(true); 
       Object dmPicker = new Object(); 
       dmPicker = field.get(datePicker); 
       ((View) dmPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
    catch (SecurityException e) { 
     TLog.d("ERROR", e.getMessage()); 
    } 
    catch (IllegalArgumentException e) { 
     TLog.d("ERROR", e.getMessage()); 
    } 
    catch (IllegalAccessException e) { 
     TLog.d("ERROR", e.getMessage()); 
    } 
} 
0

我修改了一些事情,如: 風格製造了Android默認Theme_Holo_Dialog和知名度刪除的日期。

以下一些改變我的代碼是:

pick_expire_date.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Get Current Date 
      final Calendar c = Calendar.getInstance(); 
      cyear = c.get(Calendar.YEAR); 
      cmonth = c.get(Calendar.MONTH); 
      cday = c.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(
        CheckoutPaymentActivity.this, 
        android.R.style.Theme_Holo_Dialog, 
        new DatePickerDialog.OnDateSetListener() { 
         @Override 
         public void onDateSet(DatePicker view, int year, 
               int monthOfYear, int dayOfMonth) { 
          pick_expire_date.setText((monthOfYear + 1)+"/"+year); 
          mMonth = monthOfYear + 1; 
          mYear = year; 
         } 
        }, 
        cyear, cmonth, cday); 
      datePickerDialog.getDatePicker().findViewById(getResources().getIdentifier("day","id","android")).setVisibility(View.GONE); 
      datePickerDialog.show(); 
     } 
    });