2014-11-30 18 views
16

Büyük Nerd Ranch'in Android Kılavuzu'nda çalışıyorum. atama Ceza Niyetinde düzenini kullanarak DatePicker kullanıyorum.calendarViewShown Android onurlandırılmamış 5.0 Lollipop

5.0 öncesi aygıtlarda, takvim, düzeninde tanımlandığı şekilde DatePicker'da gösterilmez, ancak Android 5.0 bunu yok sayar ve bir takvim gösterir. Herhangi bir fikir burada neler olabilir?

Tüm kod Github kullanılabilir.

dialog_date.xml

<?xml version="1.0" encoding="utf-8"?> 
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialog_date_datePicker" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:calendarViewShown="false" > 
</DatePicker> 

DatePickerFragment.java

package com.sudhirkhanger.android.criminalintent; 

import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.view.View; 
import android.widget.DatePicker; 
import android.widget.DatePicker.OnDateChangedListener; 

public class DatePickerFragment extends DialogFragment { 

    public static final String EXTRA_DATE = "com.sudhirkhanger.android.criminalintent.date"; 
    private Date mDate; 

    public static DatePickerFragment newInstance(Date date) { 
     Bundle args = new Bundle(); 
     args.putSerializable(EXTRA_DATE, date); 
     DatePickerFragment fragment = new DatePickerFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    private void sendResult(int resultCode) { 
     if (getTargetFragment() == null) 
      return; 
     Intent i = new Intent(); 
     i.putExtra(EXTRA_DATE, mDate); 
     getTargetFragment().onActivityResult(getTargetRequestCode(), 
       resultCode, i); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     mDate = (Date) getArguments().getSerializable(EXTRA_DATE); 
     // Create a Calendar to get the year, month, and day 
     final Calendar calendar = Calendar.getInstance(); 
     // calendar.setTime(mDate); 
     int year = calendar.get(Calendar.YEAR); 
     int month = calendar.get(Calendar.MONTH); 
     int day = calendar.get(Calendar.DAY_OF_MONTH); 

     View v = getActivity().getLayoutInflater().inflate(
       R.layout.dialog_date, null); 

     DatePicker datePicker = (DatePicker) v 
       .findViewById(R.id.dialog_date_datePicker); 
     datePicker.init(year, month, day, new OnDateChangedListener() { 
      public void onDateChanged(DatePicker view, int year, int month, 
        int day) { 
       // Translate year, month, day into a Date object using a 
       // calendar 
       int hour = calendar.get(Calendar.HOUR_OF_DAY); 
       int minute = calendar.get(Calendar.MINUTE); 
       mDate = new GregorianCalendar(year, month, day, hour, minute) 
         .getTime(); 
       // Update argument to preserve selected value on rotation 
       getArguments().putSerializable(EXTRA_DATE, mDate); 
      } 
     }); 

     return new AlertDialog.Builder(getActivity()) 
       .setView(v) 
       .setTitle(R.string.date_picker_title) 
       .setPositiveButton(android.R.string.ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int which) { 
           sendResult(Activity.RESULT_OK); 
          } 
         }).create(); 

    } 
} 
+1

çalıştı. – Mulgard

+1

Merhaba, Bu burada yanıtlandı: http://stackoverflow.com/questions/26854762/android-material-design-inline-datepicker-issue. –

+0

@DavidSchofield Teşekkürler David. Google'ın dokümanları güncellememesi garip. –

cevap

30

çözüm

here nakledilmiş Sen android:calendarViewShown="false" ve android:datePickerMode="spinner" her ikisini de kullanmak gerekir.

Bu sorunu çözer. Kodun altında

<DatePicker xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialog_date_datePicker" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:calendarViewShown="false" 
    android:datePickerMode="spinner" > 
</DatePicker> 
+0

ama bununla birlikte çirkin bir uyarı alırsınız :(sadece api 21'de kullanın, şu andaki min 16'dır. Sanırım onu ​​görmezden gelebilirim. – Mulgard

+0

oh sadece daha fazla gördüm hata verdi: 'rror: Kaynak tanımlayıcı bulunamadı 'android' 'paketindeki' datePickerMode 'özniteliği için – Mulgard

+0

@Mulgard Belgelerinizi buldunuz mu? –

2

ben tam olarak aynı sorun var benim

new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog, this, year,month, day); 
+0

Aynı şeyi kullandım ama Altta ton yeni malzeme tarzı olmaz. – Analizer

İlgili konular