2012-05-20 9 views
9

डेटपिकरडियलॉग में दिनांक फ़ील्ड को छुपाएं/हटाएं। दरअसल मेरी आवश्यकता मूल तारीख पिकर संवाद का उपयोग करना है, लेकिन यह दिन, महीने और वर्ष के साथ दिखाई देती है। लेकिन मेरी आवश्यकता के अनुसार मुझे केवल महीने और साल की आवश्यकता है। तो मैं दृश्य से दिन के क्षेत्र को छिपाना या हटाना चाहता हूं।एंड्रॉइड - datepickerdialog

कोई भी मदद बहुत उपयोगी होगी।

उत्तर

4
Private DatePickerDialog createDialogWithoutDateField(){ 

    DatePickerDialog dpd = new DatePickerDialog(_activity, ExpiryDateSetListener,cyear,cmonth, cday); 
    try{ 
    Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields(); 
    for (Field datePickerDialogField : datePickerDialogFields) { 
     if (datePickerDialogField.getName().equals("mDatePicker")) { 
      datePickerDialogField.setAccessible(true); 
      DatePicker datePicker = (DatePicker) datePickerDialogField.get(dpd); 
      Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); 
      for (Field datePickerField : datePickerFields) { 
       if ("mDayPicker".equals(datePickerField.getName())) { 
        datePickerField.setAccessible(true); 
        Object dayPicker = new Object(); 
        dayPicker = datePickerField.get(datePicker); 
        ((View) dayPicker).setVisibility(View.GONE); 
       } 
      } 
     } 

     } 
    }catch(Exception ex){ 
    } 
    return dpd; 

} 

डेटपिकरडियलॉग में दिन फ़ील्ड को छिपाने के लिए उपरोक्त कोड का उपयोग करें।

DatePicker को यह LINK

+11

काम करता है यह एक नीच सिफारिश है। सबसे विश्वसनीय जवाब अपने आप को रोल करना है। यहां तक ​​कि यदि आप यहां प्रस्तावित स्क्रिप्ट-किड्डी गेम खेलना चाहते हैं, तो प्रतिबिंब का उपयोग न करें - 'getDatePicker()' और 'findViewById() 'के माध्यम से विशेष विजेट्स पर जाएं और अपनी दृश्यता को इस तरह सेट करें। दोनों दृष्टिकोण आंतरिक कार्यान्वयन के बारे में धारणाएं करते हैं जो एंड्रॉइड ओएस रिलीज या OEM फर्मवेयर संशोधनों में मान्य नहीं हो सकते हैं, लेकिन कम से कम 'findViewById() 'दृष्टिकोण कम धारणाएं (और शायद तेज़ी से चलाएगा)। – CommonsWare

+0

@ कॉमन्सवेयर ओह ठीक है सुझाव –

+0

के लिए धन्यवाद यह केवल 3.2 और एंड्रॉइड –

6

स्रोत कोड देखें और आप, क्लोन करने के लिए अपने स्वयं के पैकेज में refactor, और के लिए उसमें बदलाव के लिए DatePickerDialog उपलब्ध हैं।

mDatePicker.getDatePicker().setCalendarViewShown(false); 

जो एक बहुत ही वैध कैलेंडर खंड को दूर करने के कॉल है:

-2

मुझे नहीं लगता कि आपको लगता है कि गहरे जाने की जरूरत है जब तक आप इसे अनुकूलित करना चाहते हैं .. है।

10

मैं इस तरह की चीज करने के लिए प्रतिबिंब का उपयोग करने की अनुशंसा नहीं करता हूं।

((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

ध्यान रखें कि API LEVEL >= 11 पर DatePickerDialog कार्यों से .getDatePicker() विधि:

ऐसा करने के लिए एक सरल और अधिक सुंदर तरीका है।

+3

यह लॉलीपॉप उपकरणों पर एक शून्य सूचक अपवाद का कारण बनता है क्योंकि वे एक अलग दिनांक पिकर लेआउट का उपयोग करते हैं। –

+0

स्पष्ट रूप से यह मेरे लिए काम कर रहा है। लॉलीपॉप पर चल रहा है। –

+2

नौगेट में –

0
private Calendar mCalendar; 
    mCalendar = Calendar.getInstance();// Initialize Calendar 

dialog_date_picker.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/rounded_corners" 
android:orientation="vertical" 
android:padding="8dp"> 
<DatePicker 
    android:id="@+id/date_picker" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="4" 
    android:calendarViewShown="false" 
    android:datePickerMode="spinner" /> 
<Button 
    android:id="@+id/date_time_set" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:background="@color/colorPrimary" 
    android:text="Set" 
    android:textColor="@color/colorWhite" /></LinearLayout> 

DialogMethod क्लिक पर बुलाया:

private void ExpiryDialog() { 
    System.out.println("Inside Dialog Box"); 
    final Dialog dialog = new Dialog(context); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.dialog_date_picker); 
    dialog.show(); 
    final DatePicker datePicker = (DatePicker) dialog.findViewById(R.id.date_picker); 
    date_time_set = (Button) dialog.findViewById(R.id.date_time_set); 
    datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), null); 

    LinearLayout ll = (LinearLayout) datePicker.getChildAt(0); 
    LinearLayout ll2 = (LinearLayout) ll.getChildAt(0); 
    ll2.getChildAt(1).setVisibility(View.INVISIBLE); 

    date_time_set.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View view){ 
      dialog.dismiss(); 
      Integer month = datePicker.getMonth()+1; 
      Integer year = datePicker.getYear(); 
      expMonth = (month.toString().length() == 1 ? "0"+month.toString():month.toString()); 
      expYear = year.toString(); 
      etExpiryDate.setText(expMonth + "/" + expYear); 
     } 
    }); 
} 

इस कोड काम करता है और एक DatePicker में दिन छुपाता है, तो मैं कार्ड के लिए समाप्ति दिनांक दिखा सकते हैं। का आनंद लें!!

0
Calendar c = Calendar.getInstance(); 
     int mYear = c.get(Calendar.YEAR); 
     int mMonth = c.get(Calendar.MONTH); 
     int mDay = c.get(Calendar.DAY_OF_MONTH); 
     DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_DARK, 
       new DatePickerDialog.OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker view, int year, 
              int monthOfYear, int dayOfMonth) { 

         txtMonth.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); 

        } 
       }, mYear, mMonth, mDay); 
     ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 
     datePickerDialog.show(); 

इस लिंक Disable day selection on datepicker example

1
((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

उल्लेख यह ठीक से

+1

पर हूं कोड के बारे में कुछ और मददगार होंगे। –

+0

एंड्रॉइड 6.0.1 पर, मुझे एक NullPointerException मिलता है। – SH7890