Day26 Android - datepicker+timepicker(日期+时间选择器)

在某些应用来说,有时会看的到这些的工具,像是预约、或是创立帐号时要输入的生日等,都算是好用的一个小功能,也是我在写专案有写到的小功能之一,首先看到效果图:

  • datepicker
    https://ithelp.ithome.com.tw/upload/images/20210912/20139259I7kNGoPKIl.jpg

  • timepicker
    https://ithelp.ithome.com.tw/upload/images/20210912/201392590g24wtZzIy.jpg

布局

我做的布局稍稍比较简单一点,上面的部分就是datepicker(日期选择器),而下面的部分是timepicker(时间选择器),大约就是我透过按钮可以呼叫出Android设计的选择器样板(写在onClick对应的方法内),另外也可以在activity中透过set、get来进行取值、设定文字等操作。
https://ithelp.ithome.com.tw/upload/images/20210912/20139259aexMo3dltI.png

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textview"
        android:layout_width="186dp"
        android:layout_height="39dp"
        android:gravity="left|center"
        android:text="日期:"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.209" />
    <TextView
        android:id="@+id/textview2"
        android:layout_width="186dp"
        android:layout_height="39dp"
        android:gravity="left|center"
        android:text="时间:"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.596" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="224dp"
        android:onClick="datePicker"
        android:text="选择"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.47"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="484dp"
        android:onClick="timePicker"
        android:text="选择"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity

public class MainActivity extends AppCompatActivity {
    //显示日期、时间
    TextView textDate,textTime;
    //这个dialog的监听物件(目前空)
    DatePickerDialog.OnDateSetListener pickerDialog;
    TimePickerDialog.OnTimeSetListener timeDialog;
    Calendar calendar = Calendar.getInstance();//用来做date
    Calendar calendar1 = Calendar.getInstance();//用来做time
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textDate=findViewById(R.id.textview);
        textTime=findViewById(R.id.textview2);
        //date里面dialog的日期选择给Calendar.xxx及日期文字的显示
        pickerDialog= new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                calendar.set(Calendar.YEAR,year);//年
                calendar.set(Calendar.MONTH,month);//月(*注意:此处的月份从0~11*)
                calendar.set(Calendar.DATE,dayOfMonth);//日
                textDate.setText("日期:"+year+"/"+(month+1)+"/"+dayOfMonth);//使其月份+1显示
            }
        };
        //time里面dialog时间的选择给Calendar.xxx及时间的显示
        timeDialog= new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                calendar1.set(Calendar.HOUR,hourOfDay);//小时
                calendar1.set(Calendar.MINUTE,minute);//分钟
                textTime.setText("时间:"+hourOfDay+"时"+minute+"分");
            }
        };
    }
    public void datePicker(View v){
        //建立date的dialog
        DatePickerDialog dialog = new DatePickerDialog(v.getContext(),
                pickerDialog,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
        dialog.show();
    }
    public void timePicker(View v){
        //建立time的dialog
        TimePickerDialog timePickerDialog = new TimePickerDialog(v.getContext(),
                timeDialog,
                calendar1.get(Calendar.HOUR),
                calendar1.get(Calendar.MINUTE),
                false);
        timePickerDialog.show();
    }
}

最後附上date里面的month他是跑0~11的图:
https://ithelp.ithome.com.tw/upload/images/20210912/20139259q4YIovRpGc.png
记得setText要显示month时,要将他进行+1的动作,不然显示会少一个月。


<<:  效能分析除错方法

>>:  Day 27 用户拒绝权定义规划实作

【在 iOS 开发路上的大小事-Day02】抛弃 Storyboard 改用 Xib 来做全部的 UI 设计吧

前情提要 一般在用 Xcode 创新专案的时候,会预设使用 Main.storyboard 来作为我...

DAY24-JAVA的抛出例外

昨天跟大家介绍trycatch-finally,今天就来跟大家说说抛出例外(throw)吧!!! 抛...

Day 29 Cloudera Manager

CDH 5.16.2 Deploy Cloudera Manager 载点 https://docs...

Day14- 不纯关系 Deployment 和 ReplicaSet(一)

前面我们介绍了单pod建立service,不过实务上这种做法很没必要。 因为service的工作是提...

[Day 15] 阿嬷都看得懂的开始写第一支 .css 档案罗!

阿嬷都看得懂的开始写第一支 .css 档案罗! 昨天我们介绍了怎麽使用 style 标签,把所有 C...