DateTimePicker运行的不同取决于Android中的api级别
我想在我的项目中使用日期时间选择器 本教程非常有效。当我在api 19中运行这个datetimepicker时,就像这个网站一样,我想这样做 当我运行api 22时,datetimepicker如下所示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
有什么建议吗?我用这段代码解决了这个问题
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);但我会接受真实的答案,谢谢。