iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Mobile Development

Android Studio 30天學習系列 第 18

Android Studio 30天學習-DAY18_日期選擇功能_Calendar

  • 分享至 

  • xImage
  •  

日期選擇功能_Calendar

今天是做日期選擇功能,最常見是在物件較多的時後可以指定天數找尋到那一天的資料。
建立的方式我是使用內建的Calendar功能函式。

開頭

在主程式前面建立一個Calendar。

    Calendar calendar = Calendar.getInstance ();

XML頁面

這邊我只給了一個TextView以及Button,操作目的是要在按下按鈕時會進入日期選擇的功能,選擇完畢後將結果放到TextView上面,方便我們觀察出所選擇的日期在什麼時候。

我在這邊有加入GuideLine對齊文字與Button。

<TextView
        android:id="@+id/Date_selector_display_Text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="選擇日期"
        android:textAlignment="center"
        app:layout_constraintEnd_toStartOf="@+id/SelectDate"
        app:layout_constraintStart_toStartOf="@+id/guideline9"
        app:layout_constraintTop_toTopOf="@+id/guideline8"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/SelectDate"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:background="@drawable/line_horizontal"
        app:layout_constraintEnd_toStartOf="@+id/guideline10"
        app:layout_constraintTop_toTopOf="@+id/guideline8"
        tools:ignore="MissingConstraints" />

Java程式

Java程式我是撰寫在Activity上,另外也會放一個寫在Fragment上面的程式碼。

  1. 寫在Activity上的Java程式碼,前面需要撰寫出TextView以及Button的畫面對應ID,以及事先實踐出TextView和Button。
    • 以下程式碼中有注意事項:
      • yyyy.MM.dd的格式不能任意更改。
      • Locale.TAIWAN後面的國籍可以任意選擇,Locale函式中有各種不同的國籍。
      • calendar.set中設定年份是使用YEAR、月份是使用MONTH而設定日期是使用DAY_OF_MONTH
//寫在Activity上的Java程式
//日期選擇
        dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int YEAR, int MonthofYear, int DayofMonth) {
                calendar.set(Calendar.YEAR,YEAR);
                calendar.set(Calendar.MONTH,MonthofYear);
                calendar.set(Calendar.DAY_OF_MONTH,DayofMonth);
                String myFormat = "yyyy/MM/dd";                     //yyyy.MM.dd 字母大小若更改就會無法顯示
                SimpleDateFormat SDF = new SimpleDateFormat(myFormat, Locale.TAIWAN);   //Taiwan日期
                date_display.setText(String.format(SDF.format(calendar.getTime())));
            }
        };
        dateselect.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View view) {
                DatePickerDialog dialog = new DatePickerDialog(QuantitySelectActivity.this,
                        dateSetListener,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH));
                dialog.show();
            }
        });
  • Activity畫面展示
    • Activity顯示畫面
    • 選擇日期畫面
    • 年份選擇
    • 備註
      • 亦能透過左右按鈕選擇月份,也可以透過點擊年份選擇自己所需年分。
  1. Fragment上撰寫日期程式碼,必須在前面所說的onViewCreated新建。
@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        date_display = view.findViewById (R.id.Date_selector_display_Text1);
        dateselect = view.findViewById (R.id.SelectDate1);

        //日期選擇
        dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int YEAR, int MonthofYear, int DayofMonth) {
                calendar.set(Calendar.YEAR,YEAR);
                calendar.set(Calendar.MONTH,MonthofYear);
                calendar.set(Calendar.DAY_OF_MONTH,DayofMonth);
                String myFormat = "yyyy/MM/dd";                     //yyyy.MM.dd 字母大小若更改就會無法顯示
                SimpleDateFormat SDF = new SimpleDateFormat(myFormat, Locale.TAIWAN);   //Taiwan日期
                date_display.setText(String.format(SDF.format(calendar.getTime())));
            }
        };
        dateselect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatePickerDialog dialog = new DatePickerDialog(view.getContext (),
                        dateSetListener,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH));
                dialog.show();
            }
        });
    }
  • 注意事項除了與前面相同之外,另外在顯示日期選擇的地方需要做些微更改,我是改成view.getContext()

  • 顯示結果
    這邊我撰寫在ViewPager中,其介面是使用Fragment進行套用的。

    • Viewpager頁面
    • 日期選擇效果
    • 選擇結果顯示在TextView上面
  • 在TextView上面的日期文字可以透過.getText拿到自己當前所選擇的日期回覆。

  • dialog沒有輸入.show()不會顯示出日期選擇的畫面

以上是今天做的日期選擇功能。


上一篇
Android Studio 30天學習-DAY17_下拉式選單Spinner
下一篇
Android Studio 30天學習-DAY19_簡易綜合實作
系列文
Android Studio 30天學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言