android - DatePicker विजेट नेक्सस 6 पर संपूर्ण अलर्ट डीलाॉग नहीं लेता है




alertdialog (3)

अगर कोई इस बारे में दीवार के खिलाफ अपने सिर को बाँध रहा है (मैं निश्चित रूप से इसके साथ निपटने के छह घंटे के बाद था), तो यह शायद आपके लिए काम करेगा

इसके अंदर एक DatePicker के साथ एक AlertDialog का उपयोग करने के बजाय, DatePickerDialog का उपयोग करें न केवल सेट अप करना बहुत आसान है, लेकिन यह वास्तव में अपेक्षित रूप से दिखाता है

उदाहरण उपयोग:

DateTime dateTime = new DateTime();

new DatePickerDialog(
                    getActivity(),
                    R.style.DatePickerDialogCustom,
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                            dateTime = new DateTime(
                                    year,
                                    month + 1,
                                    dayOfMonth,
                                    dateTime.getHourOfDay(),
                                    dateTime.getMinuteOfHour()
                            );
                            etDate.setText(dateFormatter.print(dateTime));
                        }
                    },
                    dateTime.getYear(),
                    dateTime.getMonthOfYear() - 1,
                    dateTime.getDayOfMonth()
            ).show();

महीनों 1 से ऑफसेट हैं क्योंकि DatePicker 0 और 11 के बीच माह मान देता है।

शैली के लिए, एक चेतावनी संवाद शैली का उपयोग न करें। वास्तव में यह मूल मुद्दे का कारण बनता है अगर आपको एक कस्टम शैली की ज़रूरत नहीं है, तो इसे कन्स्ट्रक्टर से हटा दें (नल का उपयोग न करें) यदि आप एक कस्टम शैली का उपयोग कर रहे हैं, तो बस अपनी शैली में एक नई शैली बनाएं। Xml:

<style name="DatePickerDialogCustom" parent="@style/Theme.AppCompat.Dialog">
    <item name="android:colorBackground">@color/background</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:datePickerStyle">@style/DatePickerCustom</item>
</style>

<style name="DatePickerCustom" parent="@android:style/Widget.Material.DatePicker">
    <item name="android:headerBackground">@color/colorAccent</item>
</style>

मुझे नहीं पता कि वही मुद्दा टाइमपिक्कर्स को परेशान करता है, लेकिन अगर मुझे लगता है कि ऐसा कोई भी समाधान काम करेगा

मेरे पास एक DatePickerFragment है जो एक बहुत ही सरल कस्टम लेआउट का उपयोग करता है। लेआउट छोटे डिवाइस (एचटीसी वन एम 7) पर पूरा चेतावनी संवाद लेता है, लेकिन नेक्सस 6 पर नहीं है। क्या किसी को पता है कि डेटपेकर नेक्सस 6 अलर्ट डायलॉग की पूरी चौड़ाई नहीं ले रही है या समस्या निवारण शुरू करने के लिए क्यों? धन्यवाद!

नेक्सस 6 (ध्यान दें कि तारीख हैडर पूरे चेतावनी संवाद को भर नहीं करता है)

एचटीसी वन एम 7

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_date_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:calendarViewShown="false">
</DatePicker>

DatePickerFragment के onCreateDialog ()

public Dialog onCreateDialog(Bundle savedInstanceState) {
        Date date = (Date) getArguments().getSerializable(ARG_DATE);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

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

        mDatePicker = (DatePicker)
  v.findViewById(R.id.dialog_date_date_picker);
        mDatePicker.init(year, month, day, null);

        return new AlertDialog.Builder(getActivity())
                 .setView(v)
//                     .setTitle(R.string.date_picker_title)
                 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                         int year = mDatePicker.getYear();
                         int month = mDatePicker.getMonth();
                         int day = mDatePicker.getDayOfMonth();
                         Date date = new GregorianCalendar(year, month, day).getTime();
                         sendResult(Activity.RESULT_OK, date);
                     }
                 })
                 .create();
        }

इसका कारण है AlertDialog बच्चे DatePicker से अधिक स्थान लेता है।

बिना डायलॉग थीम (उदाहरण। Theme.AppCompat.Light.Dialog ) का उपयोग सुनिश्चित करें। .Alert प्रत्यय।


मैं इसे नितजज से सुझाव का उपयोग करने के लिए काम करने में सक्षम नहीं था, लेकिन मैंने स्विचर किया कि मैंने DatePickerDialog को कैसे बनाया और यह अब उम्मीद के अनुसार काम करता है पूरा स्रोत नीचे है मुख्य अंतर पर क्रेटेडयालॉग में है

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener{

    public static final String EXTRA_DATE =
            "com.amicly.acaringtext.date";

    private static final String ARG_DATE = "date";

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Date date = (Date) getArguments().getSerializable(ARG_DATE);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

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

    private void sendResult(int resultCode, Date date) {
        if (getTargetFragment() == null) {
            return;
        }
        Intent intent = new Intent();
        intent.putExtra(EXTRA_DATE, date);

        getTargetFragment().
                onActivityResult(getTargetRequestCode(), resultCode, intent);
    }

    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        Date date = new GregorianCalendar(year, month, day).getTime();
        sendResult(Activity.RESULT_OK, date);
    }
}




alertdialog