calendarViewShown在Android 5.0 Lollipop上不被兑现 [英] calendarViewShown is not being honored on Android 5.0 Lollipop

查看:224
本文介绍了calendarViewShown在Android 5.0 Lollipop上不被兑现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过The Big Nerd Ranch的Android指南工作。在
分配刑事意图中,我使用DatePicker与以下
布局。



在5.0之前的设备上,日历不会按照定义的DatePicker显示在
的布局,但Android 5.0忽略这个并显示一个日历。任何想法
这可能会发生什么?



完整代码可在 Github



dialog_date.xml

 <?xml version =1.0encoding =utf-8?> 
< DatePicker xmlns:android =http://schemas.android.com/apk/res/android
android:id =@ + id / dialog_date_datePicker
android:layout_width =match_parent
android:layout_height =match_parent
android:calendarViewShown =false>
< / DatePicker>

DatePickerFragment.java

  package com.sudhirkhanger.android.criminalintent; 

import java.util.Calendar;
import java.util.Date
import java.util.GregorianCalendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;

public class DatePickerFragment extends DialogFragment {

public static final String EXTRA_DATE =com.sudhirkhanger.android.criminalintent.date;
私人日期mDate;

public static DatePickerFragment newInstance(Date date){
Bundle args = new Bundle();
args.putSerializable(EXTRA_DATE,date);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
返回片段;
}

private void sendResult(int resultCode){
if(getTargetFragment()== null)
return;
Intent i = new Intent();
i.putExtra(EXTRA_DATE,mDate);
getTargetFragment()。onActivityResult(getTargetRequestCode(),
resultCode,i);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
mDate =(Date)getArguments()。getSerializable(EXTRA_DATE);
//创建日历以获取年,月和日
final Calendar calendar = Calendar.getInstance();
// calendar.setTime(mDate);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

查看v = getActivity()。getLayoutInflater()。inflate(
R.layout.dialog_date,null);

DatePicker datePicker =(DatePicker)v
.findViewById(R.id.dialog_date_datePicker);
datePicker.init(year,month,day,new OnDateChangedListener(){
public void onDateChanged(DatePicker view,int year,int month,
int day){
//使用
//日历
将year,month,day转换为Date对象int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE) ;
mDate = new GregorianCalendar(年,月,日,小时,分)
.getTime();
//更新参数以保留旋转时选定的值
getArguments() .putSerializable(EXTRA_DATE,mDate);
}
});

返回新的AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R .string.ok
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,
int which){
sendResult(Activity.RESULT_OK);
}
})。create();

}
}


解决方案

该解决方案已发布此处



您有要使用 android:calendarViewShown =false android:datePickerMode =spinner



这解决了这个问题。

 < DatePicker xmlns:android =http:// $($)
android:id =@ + id / dialog_date_datePicker
android:layout_width =match_parent
android:layout_height =match_parent
android:calendarViewShown =false
android:datePickerMode =spinner>
< / DatePicker>


I am working through The Big Nerd Ranch's Android Guide. In the assignment Criminal Intent I am using DatePicker with following layout.

On pre-5.0 devices, calendar is not shown in DatePicker as defined in the layout but Android 5.0 ignores this and shows a calendar. Any idea what might be going on here?

Full code is available on Github.

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_datePicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:calendarViewShown="false" >
</DatePicker>

DatePickerFragment.java

package com.sudhirkhanger.android.criminalintent;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;

public class DatePickerFragment extends DialogFragment {

    public static final String EXTRA_DATE = "com.sudhirkhanger.android.criminalintent.date";
    private Date mDate;

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

    private void sendResult(int resultCode) {
        if (getTargetFragment() == null)
            return;
        Intent i = new Intent();
        i.putExtra(EXTRA_DATE, mDate);
        getTargetFragment().onActivityResult(getTargetRequestCode(),
                resultCode, i);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mDate = (Date) getArguments().getSerializable(EXTRA_DATE);
        // Create a Calendar to get the year, month, and day
        final Calendar calendar = Calendar.getInstance();
        // calendar.setTime(mDate);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

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

        DatePicker datePicker = (DatePicker) v
                .findViewById(R.id.dialog_date_datePicker);
        datePicker.init(year, month, day, new OnDateChangedListener() {
            public void onDateChanged(DatePicker view, int year, int month,
                    int day) {
                // Translate year, month, day into a Date object using a
                // calendar
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int minute = calendar.get(Calendar.MINUTE);
                mDate = new GregorianCalendar(year, month, day, hour, minute)
                        .getTime();
                // Update argument to preserve selected value on rotation
                getArguments().putSerializable(EXTRA_DATE, mDate);
            }
        });

        return new AlertDialog.Builder(getActivity())
                .setView(v)
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(android.R.string.ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                sendResult(Activity.RESULT_OK);
                            }
                        }).create();

    }
}

解决方案

The solution has been posted here

You have to use both android:calendarViewShown="false" and android:datePickerMode="spinner".

This solves it.

<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_date_datePicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:calendarViewShown="false"
    android:datePickerMode="spinner" >
</DatePicker>

这篇关于calendarViewShown在Android 5.0 Lollipop上不被兑现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆