calendarViewShown没有被兑现在Android 5.0棒棒糖 [英] calendarViewShown is not being honored on Android 5.0 Lollipop

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

问题描述

我通过大书呆子牧场的Andr​​oid指南工作。在里面 我使用的DatePicker与分配如下犯罪意向 布局。

在pre-5.0的设备,日历不在的DatePicker中定义所示 布局而Android 5.0忽略了这一点,并显示一个日历。任何想法 什么可能是怎么回事?

全部code可在<一href="https://github.com/donniezazen/The-Big-Nerd-Ranch-Guide/tree/master/CriminalIntent">Github.

dialog_date.xml

 &LT; XML版本=1.0编码=UTF-8&GT?;
&LT;的DatePicker的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / dialog_date_datePicker
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:calendarViewShown =假&GT;
&LT; / DatePicker的&GT;
 

DatePickerFragment.java

 包com.sudhirkhanger.android.criminalintent;

进口的java.util.Calendar;
进口java.util.Date;
进口java.util.GregorianCalendar中;

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

公共类DatePickerFragment扩展DialogFragment {

    公共静态最后弦乐EXTRA_DATE =com.sudhirkhanger.android.criminalintent.date;
    私人日期mDate;

    公共静态DatePickerFragment的newInstance(日期日期){
        捆绑的args =新包();
        args.putSerializable(EXTRA_DATE,日期);
        DatePickerFragment片段=新DatePickerFragment();
        fragment.setArguments(参数);
        返回片段;
    }

    私人无效sendResult(INT结果code){
        如果(getTargetFragment()== NULL)
            返回;
        意图I =新意图();
        i.putExtra(EXTRA_DATE,mDate);
        getTargetFragment()。onActivityResult(getTargetRequest code()
                因此code,I);
    }

    @覆盖
    公共对话onCreateDialog(包savedInstanceState){
        mDate =(日期)getArguments()getSerializable(EXTRA_DATE)。
        //创建一个日历来获得的年,月,日
        最后台历挂历= Calendar.getInstance();
        // calendar.setTime(mDate);
        INT年= calendar.get(Calendar.YEAR);
        INT月= calendar.get(Calendar.MONTH);
        INT天= calendar.get(Calendar.DAY_OF_MONTH);

        视图V = getActivity()。getLayoutInflater()。膨胀(
                R.layout.dialog_date,NULL);

        DatePicker的日期选择器=(DatePicker的)V
                .findViewById(R.id.dialog_date_datePicker);
        datePicker.init(年,月,日,新OnDateChangedListener(){
            公共无效onDateChanged(DatePicker的观点,INT年,月整型,
                    日整型){
                //使用翻译的年,月,日为Date对象
                // 日历
                INT小时= calendar.get(Calendar.HOUR_OF_DAY);
                INT分钟= calendar.get(Calendar.MINUTE);
                mDate =新的GregorianCalendar(年,月,日,时,分)
                        .getTime();
                //更新参数preserve选择轮换的价值
                。getArguments()putSerializable(EXTRA_DATE,mDate);
            }
        });

        返回新AlertDialog.Builder(getActivity())
                .setView(v)的
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(android.R.string.ok,
                        新DialogInterface.OnClickListener(){
                            公共无效的onClick(DialogInterface对话框,
                                    其中INT){
                                sendResult(Activity.RESULT_OK);
                            }
                        })。创建();

    }
}
 

解决方案

该解决方案已经公布这里

您必须同时使用安卓calendarViewShown =假安卓datePickerMode =微调

这解决了它。

 &LT;的DatePicker的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / dialog_date_datePicker
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:calendarViewShown =假
    机器人:datePickerMode =微调&GT;
&LT; / DatePicker的&GT;
 

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棒棒糖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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