程序中的小细节——datepicker的两种显示方式,spinner和calendar

时间:2022-06-24 18:06:30

在使用官方提供的datepicker控件选择日期的时候,它提供了两种方式。spinner和calendar。

一个是类似spinner的上下滚动的选择,一个是像日历一样选择。各有优点。

一:

方式的切换

在代码和xml中使用属性来进行切换。

calendarViewShown=true    or   false,

spinnersShown= true   or  false;


如果这两个的设置都没有起到预期的效果,那么你需要更改datepicker的选取模式。

datePickerMode= spinner   or    calendar;

这样便可以显示需要的了。

程序中的小细节——datepicker的两种显示方式,spinner和calendar

二:

有时候需要只显示年和月,或者有其他的需求


这里提供一种方式,spinner模式下,是使用3个子控件来显示可选项的,年月日.  可以设置不需要的变成gone的形式。

  "2" 所在的位置可以发生变化,0  ,1。

看设置应该是按年月日的顺序,对应 0 ,1,2。(和下面的xml貌似顺序不一致,最好依据测试程序来定)。



((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE);


两个效果,外加 只显示年和月。 其他的显示根据需求进行设置,当然了也可以自己用spinner来自定义

程序中的小细节——datepicker的两种显示方式,spinner和calendar程序中的小细节——datepicker的两种显示方式,spinner和calendar




看源码的xml

<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->

<!-- Layout of date picker-->

<!-- Warning: everything within the "pickers" layout is removed and re-ordered
depending on the date format selected by the user.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:gravity="center">

<LinearLayout android:id="@+id/pickers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center">

<!-- Month -->
<NumberPicker
android:id="@+id/month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:focusable="true"
android:focusableInTouchMode="true"
/>

<!-- Day -->
<NumberPicker
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:focusable="true"
android:focusableInTouchMode="true"
/>

<!-- Year -->
<NumberPicker
android:id="@+id/year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:focusable="true"
android:focusableInTouchMode="true"
/>

</LinearLayout>

<!-- calendar view -->
<CalendarView
android:id="@+id/calendar_view"
android:layout_width="245dip"
android:layout_height="280dip"
android:layout_marginStart="44dip"
android:layout_weight="1"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone"
/>

</LinearLayout>