Day27 - DataPickerDialog

当我们需要设计一个选择或输入日期的功能给使用者
我们势必要给三个输入:年份、月份、几号
那Android贴心的提供了设计好的日期交谈视窗供设计者使用
不仅美观、也省去很多设计的时间

开始

今天也不太需要设计布局
我们使用Toast来显示结果
所以直接拿昨天的专案来改就好
activity_main.xml不需要变更

activity_main.xml

<?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">

    <Button
        android:id="@+id/btn_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="AlertDialog测试"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

我们须先建立一个日历的物件

Calendar calendar = Calendar.getInstance();

之後在按钮的点击事件新增

new DatePickerDialog(MainActivity.this,MainActivity.this,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH))
                        .show();

new DatePickerDialog(MainActivity.this,MainActivity.this,预设年份,预设月份,预设第几天).show();
预设年份:

  • 可以是数值,如:2020。
  • 也可以抓今年的年份,如:calendar.get(Calendar.YEAR)

预设月份:

  • 可以是数值0~11(这边设定数值需+1才是真正的月份)。
  • 也可以抓今年的年份,如:calendar.get(Calendar.MONTH)

预设第几天:

  • 可以是数值1~31。
  • 也可以抓今年的年份,如:calendar.get(Calendar.DAY_OF_MONTH)

打完後会发现第二个MainActivity.this有红色毛毛虫
只要照之前的方式点到MainActivity.this,键盘按Alt+Enter
选Make开头的,并加入onDateSet()方法
就会跑出

public void onDateSet(DatePicker datePicker, int y, int m, int d) {
}

这方法是:当选完日期执行的程序

完整程序:

package com.example.listview;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
    Calendar calendar = Calendar.getInstance();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn_dialog = findViewById(R.id.btn_dialog);
        btn_dialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new DatePickerDialog(MainActivity.this,MainActivity.this,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH))
                        .show();
            }
        });
    }

    @Override
    public void onDateSet(DatePicker datePicker, int y, int m, int d) {
        Toast.makeText(MainActivity.this,"日期:"+y+"/"+(m+1)+"/"+d,Toast.LENGTH_LONG).show();
    }
}

执行结果:

  • 初始画面
    https://ithelp.ithome.com.tw/upload/images/20211003/20141769vybmg7rqOr.png

  • 点击按钮後,选择日期
    https://ithelp.ithome.com.tw/upload/images/20211003/20141769Y1W9YpS8gQ.png

  • 点ok後
    https://ithelp.ithome.com.tw/upload/images/20211003/20141769OagL8vJQom.png


DataPickerDialog这个交谈视窗
会因为Android版本不一样
长的有所不同
但不引响功能

大家不必担心,安心使用

/images/emoticon/emoticon01.gif


<<:  RDS程序开发

>>:  数据分析的好夥伴 - Python基础:物件导向(上)

[CSS] Flex/Grid Layout Modules, part 13

单元对齐跟留白的部分今天会继续,定位的问题基本上不出乱子的话就如同昨天说明的。当然,如果再加上对齐跟...

Day 29--savedInstanceState状态保存,读取Google Sheet

由下图可知 onSaveInstanceState()是当生命周期进入onStop()时会被呼叫的c...

[Day4] Face Detection - 使用Google Cloud Vision API

reference: medium - Filtering Image content with ...

[想试试看JavaScript ] HTML DOM

我们知道写程序有个阶段就是一个输入、运算处理、输出 网页是由HTML、CSS、Javascript三...

C# 入门之逻辑判断(下)

前面我们介绍了简单的条件逻辑运算符,现在我们来看一下另外一种条件判断 ———— if. 在前面的判断...