Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DateTimePicker运行的不同取决于Android中的api级别_Android_Date_Datetime_Timepicker_Picker - Fatal编程技术网

DateTimePicker运行的不同取决于Android中的api级别

DateTimePicker运行的不同取决于Android中的api级别,android,date,datetime,timepicker,picker,Android,Date,Datetime,Timepicker,Picker,我想在我的项目中使用日期时间选择器 本教程非常有效。当我在api 19中运行这个datetimepicker时,就像这个网站一样,我想这样做 当我运行api 22时,datetimepicker如下所示 有什么建议吗?我用这段代码解决了这个问题 import android.app.DatePickerDialog; import android.app.Dialog; import android.graphics.Color; import android.graphics.drawab

我想在我的项目中使用日期时间选择器

本教程非常有效。当我在api 19中运行这个datetimepicker时,就像这个网站一样,我想这样做

当我运行api 22时,datetimepicker如下所示


有什么建议吗?

我用这段代码解决了这个问题

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;

import java.util.Calendar;


public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private Calendar calendar;
    private Calendar maxCalendar;
    private Calendar minCalendar;
    private DatePickerDialog.OnDateSetListener onDateSetListener;

    private static final String TAG = DatePickerFragment.class.getSimpleName();

    public void setup(Calendar calendar, DatePickerDialog.OnDateSetListener onDateSetListener){
        this.calendar = calendar;
        this.onDateSetListener = onDateSetListener;
    }

    public void setup(Calendar calendar, Calendar maxCalendar, DatePickerDialog.OnDateSetListener onDateSetListener){
        this.calendar = calendar;
        this.maxCalendar = maxCalendar;
        this.onDateSetListener = onDateSetListener;
    }

    public void setup(Calendar calendar, Calendar maxCalendar, Calendar minCalendar){
        this.calendar = calendar;
        this.maxCalendar = maxCalendar;
        this.minCalendar = minCalendar;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

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

        DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Light_Dialog_MinWidth, this, year, month, day);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        if(minCalendar!=null){
            dialog.getDatePicker().setMinDate(minCalendar.getTimeInMillis());
        }

        if(maxCalendar != null){
            dialog.getDatePicker().setMaxDate(maxCalendar.getTimeInMillis());
        }

        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        if(onDateSetListener != null){
            onDateSetListener.onDateSet(view, year, month, day);
        }else{
            Log.w(TAG, "onDateSetListener callback is not initialized.");
        }
    }
}
就这样叫,

   public void showDatePicker() {


            Calendar calendar = Calendar.getInstance();

            DatePickerFragment fragment = new DatePickerFragment();
            fragment.setup(calendar, new OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

                }
            });
            fragment.show(getSupportFragmentManager(), null);

    }

我用这个代码来解决这个问题

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;

import java.util.Calendar;


public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private Calendar calendar;
    private Calendar maxCalendar;
    private Calendar minCalendar;
    private DatePickerDialog.OnDateSetListener onDateSetListener;

    private static final String TAG = DatePickerFragment.class.getSimpleName();

    public void setup(Calendar calendar, DatePickerDialog.OnDateSetListener onDateSetListener){
        this.calendar = calendar;
        this.onDateSetListener = onDateSetListener;
    }

    public void setup(Calendar calendar, Calendar maxCalendar, DatePickerDialog.OnDateSetListener onDateSetListener){
        this.calendar = calendar;
        this.maxCalendar = maxCalendar;
        this.onDateSetListener = onDateSetListener;
    }

    public void setup(Calendar calendar, Calendar maxCalendar, Calendar minCalendar){
        this.calendar = calendar;
        this.maxCalendar = maxCalendar;
        this.minCalendar = minCalendar;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

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

        DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Light_Dialog_MinWidth, this, year, month, day);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        if(minCalendar!=null){
            dialog.getDatePicker().setMinDate(minCalendar.getTimeInMillis());
        }

        if(maxCalendar != null){
            dialog.getDatePicker().setMaxDate(maxCalendar.getTimeInMillis());
        }

        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        if(onDateSetListener != null){
            onDateSetListener.onDateSet(view, year, month, day);
        }else{
            Log.w(TAG, "onDateSetListener callback is not initialized.");
        }
    }
}
就这样叫,

   public void showDatePicker() {


            Calendar calendar = Calendar.getInstance();

            DatePickerFragment fragment = new DatePickerFragment();
            fragment.setup(calendar, new OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

                }
            });
            fragment.show(getSupportFragmentManager(), null);

    }

这是安卓自己的日历,可以根据不同的API进行设计更改。如果希望对所有API版本使用相同的日历,则应尝试使用自定义日历,而不是默认日历


如果仍然有任何困惑,请让我知道这是android自己的日历,它针对不同的API进行了设计更改。如果希望对所有API版本使用相同的日历,则应尝试使用自定义日历,而不是默认日历


如果仍然有任何困惑,请让我知道使用自定义库,否则它在不同的平台上会有所不同。您可以使用自定义主题,因此使用新的ContextThemeWrapper(myContext,android.R.style.theme\u Holo\u Light\u Dialog\u NoActionBar)自定义它。如果您使用默认的小部件,我使用materialcalendarview,然后,它们将根据不同的android版本而有所不同。最好为日期选择器使用自定义小部件或自己构建自定义小部件。使用自定义库,否则它在不同平台上会有所不同。您可以使用自定义主题,因此可以使用
new ContextThemeWrapper(myContext,android.R.style.theme\u Holo\u Light\u Dialog\u NoActionBar)对其进行自定义
我使用materialcalendarview如果您使用的是默认的小部件,那么它们将根据不同的android版本而有所不同。最好为日期选择器使用自定义小部件,或者自己构建一个自定义小部件。如何在MainAcvtivity中调用此小部件?我无法理解fragment.show(getSupportFragmentManager(),null);但我会接受正确的答案,谢谢。如何在MainAcvtivity中调用此选项?我无法理解fragment.show(getSupportFragmentManager(),null);但我会接受真实的答案,谢谢。