Android DatePicker 控件

  • Android DatePicker 控件

    Android DatePicker 允许您在自定义用户界面中选择由日,月和年组成的日期。为此功能,android提供了DatePicker和DatePickerDialog组件。
    在本教程中,我们将通过DatePickerDialog演示日期选择器的用法。DatePickerDialog是一个包含DatePicker的简单对话框。为了显示DatePickerDialog,您必须将DatePickerDialog id传递给showDialog(id_of_dialog)方法。其语法如下-
    
    showDialog(999);
    
    调用此showDialog方法时,将自动调用另一个名为onCreateDialog的方法。因此,我们也必须重写该方法。其语法如下-
    
    @Override
    protected Dialog onCreateDialog(int id) {
       // TODO Auto-generated method stub
       if (id == 999) {
          return new DatePickerDialog(this, myDateListener, year, month, day);
       }
       return null;
    }
    
    在最后一步,您必须注册DatePickerDialog侦听器并覆盖其onDateSet方法。此onDateSet方法包含更新的日期,月份和年份。其语法如下-
    
    private DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
       @Override
       public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
          // arg1 = year
          // arg2 = month
          // arg3 = day             
       }
    };
    
    除Date属性外,DatePicker对象也传递给此函数。您可以使用DatePicker的以下方法执行进一步的操作。
    方法 描述
    getDayOfMonth() 此方法获取每月的选定日期
    getMonth() 此方法获取选定的月份
    getYear() 此方法获取选定的年份
    setMaxDate(long maxDate) 此方法设置此DatePicker支持的最大日期(自1970年1月1日00:00:00在getDefault()时区开始的毫秒数)
    setMinDate(long minDate) 此方法设置此NumberPicker支持的最小日期(自1970年1月1日00:00:00在getDefault()时起的毫秒数)time zon setSpinnersShown(显示的布尔值)此方法设置是否显示微调框
    updateDate(int year,int month,int dayOfMonth) 此方法更新当前日期
    getCalendarView() 此方法返回日历视图
    getFirstDayOfWeek() 此方法返回一周的第一天
  • 示例

    这是一个演示DatePickerDialog类的用法的示例。它创建一个基本的Date Picker应用程序,该应用程序允许您使用DatePicker Widget设置日期。要试验此示例,可以在实际设备或仿真器中运行它。
    1. 您将使用Android Studio创建一个Android应用程序,并将其命名为Demo,位于com.jc2182.demo包下,如Hello World示例一章中所述。
    2. 修改src/MainActivity.java文件创建一个简单的列TableView,其中包含显示为微调器项目的项目。
    3. 修改res/layout/activity_main.xml文件的默认内容以包括创建一个简单的列表视图。
    4. 修改res/values/string.xml以添加必要的字符串组件。
    5. 运行该应用程序以启动Android模拟器并验证在该应用程序中所做更改的结果。
    以下是修改后的主要活动文件src/com.jc2182.demo/MainActivity.java的内容。该文件可以包括每个基本生命周期方法。
    
    package com.jc2182.demo;
    
    import android.app.Activity;
    import android.app.DatePickerDialog;
    import android.app.Dialog;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.DatePicker;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends Activity  {
        private DatePicker datePicker;
        private Calendar calendar;
        private TextView dateView;
        private int year, month, day;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dateView = (TextView) findViewById(R.id.textView3);
            calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
    
            month = calendar.get(Calendar.MONTH);
            day = calendar.get(Calendar.DAY_OF_MONTH);
            showDate(year, month+1, day);
        }
    
        @SuppressWarnings("deprecation")
        public void setDate(View view) {
            showDialog(999);
            Toast.makeText(getApplicationContext(), "ca",
                    Toast.LENGTH_SHORT)
                    .show();
        }
    
        @Override
        protected Dialog onCreateDialog(int id) {
            // TODO Auto-generated method stub
            if (id == 999) {
                return new DatePickerDialog(this, myDateListener, year, month, day);
            }
            return null;
        }
    
        private DatePickerDialog.OnDateSetListener myDateListener = new
                DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker arg0,
                                          int arg1, int arg2, int arg3) {
                        // TODO Auto-generated method stub
                        // arg1 = year
                        // arg2 = month
                        // arg3 = day
                        showDate(arg1, arg2+1, arg3);
                    }
                };
    
        private void showDate(int year, int month, int day) {
            dateView.setText(new StringBuilder().append(day).append("/")
                    .append(month).append("/").append(year));
        }
    }
    
    以下是res/layout/activity_main.xml文件的内容-
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="70dp"
            android:onClick="setDate"
            android:text="@string/date_button_set" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="24dp"
            android:text="@string/date_label_set"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button1"
            android:layout_marginTop="66dp"
            android:layout_toLeftOf="@+id/button1"
            android:text="@string/date_view_set"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/textView2"
            android:layout_marginTop="72dp"
            android:text="@string/date_selected"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </RelativeLayout>
    
    以下是res/values/strings.xml文件的内容-
    
    <resources>
        <string name="app_name">Demo</string>
        <string name="date_label_set">按下按钮设定日期</string>
        <string name="date_button_set">设置日期</string>
        <string name="date_view_set">日期是: </string>
        <string name="date_selected"></string>
    </resources>
    
    让我们尝试运行刚刚修改的应用程序。我假设您在进行环境设置时已创建了AVD。要从Android Studio运行该应用,请打开您项目的活动文件之一,然后工具栏中单击“运行”图标。Android studio将应用程序安装在您的AVD上并启动它,如果设置和应用程序一切正常,它将显示在“模拟器”窗口下面-
    点击“设置日期”按钮,如下界面
    设置日期后的界面