2010-11-08 66 views
20

tôi muốn tắt tùy chọn chọn ngày trên bộ chọn ngày tháng sdk android. bất kỳ cấu hình xml dễ dàng nào sẽ là tốt nhấtCách hiển thị bộ chọn ngày cho android chỉ với các trường tháng và năm?

+0

Bạn đã thử mọi thứ chưa? Bạn đã tìm kiếm giải pháp bằng công cụ tìm kiếm chưa? – Patrick

+1

tôi đã làm trong thực tế và tìm thấy những người nói rằng nó không thể, đó là không đúng nhưng tôi không có một ý tưởng rõ ràng về làm thế nào để đi về phía trước với điều này nhưng nó có thể. thanks – carbonr

Trả lời

16

Tôi vừa phát hành khung công cụ chọn ngày mới cho phép bạn tạo bộ chọn ngày tùy chỉnh. Tôi cũng đã cung cấp một số bộ chọn ngày ví dụ như bộ chọn ngày bạn đang tìm kiếm. Hy vọng, nó làm việc cho bạn.

mã có thể được tìm thấy ở đây: https://github.com/bendemboski/DateSlider

CẬP NHẬT 06/2014: Thư viện này được xây dựng năm 2010 và đã bỏ dở từ năm 2011. Vì vậy, nó rất có thể đã cũ bây giờ.

+2

Bộ chọn ngày tùy chỉnh là awsome –

+0

Oh niềm vui khi duy trì trang Wordpress ... Tôi đã cập nhật liên kết đến kho lưu trữ GitHub – Daniel

+0

là nó vẫn có liên quan? bạn có thể vui lòng cập nhật dự án để hỗ trợ studio gradle và android không? – deej

1

EDIT: theo nhận xét bên dưới, tôi sẽ không làm theo câu trả lời này nữa.

Tôi không nghĩ bạn có thể làm điều đó với công cụ chọn ngày mặc định. Bạn sẽ phải tạo nó ra khỏi các yếu tố giao diện người dùng Android cơ bản. Nhưng thay vì đi đến rắc rối đó, tại sao không sử dụng một yếu tố thư viện tốt hơn như thế này tuyệt vời-tìm kiếm iPhone-esque bánh xe: http://code.google.com/p/android-wheel/ Tôi đã không được sử dụng nó được nêu ra, nhưng tôi có kế hoạch!

+9

Đây không phải là lời khuyên xấu trong tháng 1 năm 2011, nhưng nếu bạn đang đọc bài viết này ngay bây giờ, tôi khuyên bạn không nên sử dụng thư viện bắt chước iOS. Google không thích điều đó: http://developer.android.com/design/patterns/pure-android.html – theelfismike

+1

Người dùng cũng không thích điều đó – Roel

15

Có thể hack phiên bản DatePicker bằng cách sử dụng sự phản chiếu. Bằng cách này, bạn có thể truy cập cá thể NumberPicker đại diện cho ngày trong DatePicker:

datePicker = (DatePicker) findViewById(R.id.expiration_date); 
try { 
    Field f[] = datePicker.getClass().getDeclaredFields(); 
    for (Field field : f) { 
     if (field.getName().equals("mDayPicker")) { 
      field.setAccessible(true); 
      Object dayPicker = new Object(); 
      dayPicker = field.get(datePicker); 
      ((View) dayPicker).setVisibility(View.GONE); 
     } 
    } 
} catch (SecurityException e) { 
    Log.d("ERROR", e.getMessage()); 
} 
catch (IllegalArgumentException e) { 
    Log.d("ERROR", e.getMessage()); 
} catch (IllegalAccessException e) { 
    Log.d("ERROR", e.getMessage()); 
} 
+0

Điều này làm việc cho tôi. Lưu ý rằng tôi đã phải thay đổi mDayPicker thành mDaySpinner. Tôi không chắc chắn về mức API nào đã giới thiệu thay đổi này nhưng tôi đang xây dựng cho Android 4.0.3 ngay bây giờ. – Setzer22

+1

Điều này có thể bị hỏng trong Android 5.0 và cao hơn vì DatePicker không sử dụng những bộ chọn số nữa! – Roel

+0

Trên Android 6, các trường là mDelegate, LOG_TAG, MODE_CALENDAR, MODE_SPINNER. Giải pháp không hiệu quả với tôi. –

0

Điều này làm việc tốt trong phiên bản 2.2. Nhưng tiêu đề của hộp thoại không thay đổi.

for (Field datePickerDialogField : datePickerDialogFields) {   

    if (datePickerDialogField.getName().equals("mDatePicker")) { 
     datePickerDialogField.setAccessible(true); 
     DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog); 

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

Bạn có thể sử dụng các widget https://github.com/SimonVT/android-datepicker để tương thích backported và làm cho bảng chọn ngày 'biến mất'

<net.simonvt.numberpicker.NumberPicker 
     android:id="@+id/day" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dip" 
     android:layout_marginRight="16dip" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:visibility="gone" 
     /> 
3

Nói về phản ánh việc này trong Android 4.4.2 SDK

"mDaySpinner" 

thay

"mDayPicker" 
2

Tôi nghĩ đó là giải pháp tốt nhất

datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 
Các vấn đề liên quan