【问题标题】:Android Datepicker - Always show date month year spinner layout instead of calendar viewAndroid Datepicker - 始终显示日期月份年份微调器布局而不是日历视图
【发布时间】:2019-07-23 22:32:38
【问题描述】:

在使用 android datepicker 时,我想始终显示旧的日期月份年份微调器而不是新的日历视图?我该怎么做?

我希望所有运行任何 android 版本的设备都使用此功能: 并且不想关注用户界面:

【问题讨论】:

标签: android


【解决方案1】:

我用这个答案https://stackoverflow.com/a/31610267/5700434彻底解决了问题。

主要用这个:

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

完整代码:

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{
            LogUtils.w(TAG, "onDateSetListener callback is not initialized.");
        }
    }
}

【讨论】:

    【解决方案2】:

    有许多可用于 android 日期选择器的库(例如:exmple1 example2 example3 。或者您可以使用默认日期选择器。This 日期选择器可能是您正在寻找的那个

    【讨论】:

      【解决方案3】:
      DatePickerDialog dialog = new
      DatePickerDialog(getActivity(),AlertDialog.THEME_HOLO_LIGHT, this, year, month, day);
      

      这在所有版本的 android 中都能完美运行。从 4.4 到 6.0 经过测试,虽然它已被弃用,但它支持得很好。

      【讨论】:

        【解决方案4】:

        使用 DatePicker 代替日历视图,并添加以下 xml 属性:

        android:datePickerMode="spinner"
        android:calendarViewShown="false"
        

        给出以下结果:

        【讨论】:

          猜你喜欢
          • 2022-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多