在DatePickerDialog中获取额外标头的原因

时间:2017-07-18 03:28:49

标签: android android-datepicker

我正在为DatePickerDialog获取额外的标头,如下面的屏幕截图所示。但是,我的问题不是关于如何删除这个额外的标题,而是关于此背后的 原因 。首先,让我复制并粘贴我的DatePickerDialog代码,即使它非常简单明了。

//initialize dialog
datePickerDialog = new DatePickerDialog(
        getActivity(),
        R.style.DatePickerTheme,
        this,
        today.get(Calendar.YEAR),
        today.get(Calendar.MONTH),
        today.get(Calendar.DAY_OF_MONTH));

//set dialog maximum date
datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());

//set dialog minimum possible date
datePickerDialog.getDatePicker().setMinDate(minDate.getTimeInMillis());

datePickerDialog.show();

从附带的屏幕截图中可以看出,日期选择器中有一个额外的标题(或标题)。我试图谷歌寻求解决方案,并可能了解背后的原因。我发现已经有2个类似的问题(q1q2)在stackoverflow上询问了额外的标题,解决方案也非常明确和直接。我们可以做到:

  1. datePickerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  2. datePickerDiaglog.setTitle("");
  3. 消除额外的标题。然而,没有人真正解释这背后的原因。此外,最重要的是额外标题问题 出现在Android Marshmallow,Lollipop以及可能的先前版本中,但 不是。我试图追查源代码,并从这里提到的question中的一个答案中获得启发,有人说:

      

    以下代码行设置对话框标题值:   。fromDatePickerDialog.getDatePicker()setMaxDate(d.getTime());

    所以我试着在不同版本的API上查看DatePickerDialog的源代码(23和24,特别是23,它有额外的标题问题),但没有发现setMaxDate正在设置额外的标题。我走到了尽头,坚持了一段时间。有人可以指出这个方向或分享你的经验,如果你以前见过这个?非常感谢!

    enter image description here

1 个答案:

答案 0 :(得分:0)

哇3个月没有回答我不确定你可以在标题中删除那个额外的日期我会看看DatePicker首先拥有的所有样式属性 第二个是DatePicker的一些XML样式代码,它们存在于自己的XML文件中,相应的代码创建一个DatePicker对话框并使用XML文件Dialog通过onClick of a按钮调用

Dialog Code First

    public void findByDate(View view){
    use= false;
    // custom dialog /* THIS R.style.DatePickerThem is mandatory to use res/values/styles */
    final Dialog dialog = new Dialog(MainActivity.this,R.style.DatePickerTheme);
    dialog.setContentView(R.layout.datepickerview);
    dialog.setTitle("");
    DatePicker picker = dialog.findViewById(R.id.datePicker);
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    picker.updateDate(mYear, mMonth, mDay);// Keeps Calendar initial view what ever today is!

    picker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
        //picker.init(Integer.valueOf(mMonth),Integer.valueOf(mDay),Integer.valueOf(mYear), new DatePicker.OnDateChangedListener() {
        @Override
        public void onDateChanged(DatePicker picker, int year, int monthOfYear, int dayOfMonth) {

            if (etFromDate.getText().toString().isEmpty()) {

                System.out.println("I am Not Empty");

                String searchFrom = (String.valueOf(monthOfYear+1))+(String.valueOf(dayOfMonth))+String.valueOf(year);
                if(searchFrom.length()==7){
                    StringBuilder str = new StringBuilder(searchFrom);
                    str.insert(2, '0');
                    etFromDate.setText(str);
                }else if (searchFrom.length() == 6){
                    StringBuilder str = new StringBuilder(searchFrom);
                    str.insert(0,'0');
                    str.insert(2,'0');
                    etFromDate.setText(str);
                }else {
                    etFromDate.setText(searchFrom);
                }

                dialog.dismiss();

            } else {

                String searchTo = (String.valueOf(monthOfYear+1))+(String.valueOf(dayOfMonth))+String.valueOf(year);

                if(searchTo.length()==7){
                    StringBuilder str = new StringBuilder(searchTo);
                    str.insert(2, '0');
                    etToDate.setText(str);
                }else if (searchTo.length() ==6){
                    StringBuilder str = new StringBuilder(searchTo);
                    str.insert(0,'0');
                    str.insert(2,'0');
                    etToDate.setText(str);
                }else {
                    etToDate.setText(searchTo);
                }

                dialog.dismiss();

            }
            //mDay=dayOfMonth;
            //mMonth=(month);
            //mYear=year;
        }
    });

    dialog.show();
}

日期选择器XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_White"
android:orientation="vertical">

<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:calendarViewShown="true"
    android:headerBackground="@color/color_Purple"
    android:theme="@style/DatePickerTheme" />

以下是日期选择器的样式

    <style name="DatePickerTheme"  parent="Theme.AppCompat.Light.Dialog">
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="android:selectableItemBackgroundBorderless">@color/color_Purple</item>
    <item name="android:headerBackground">@color/color_Purple</item>
    <item name="android:textColorPrimary">@color/color_Black</item>
</style>