今天是做日期選擇功能,最常見是在物件較多的時後可以指定天數找尋到那一天的資料。
建立的方式我是使用內建的Calendar功能函式。
在主程式前面建立一個Calendar。
Calendar calendar = Calendar.getInstance ();
這邊我只給了一個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程式我是撰寫在Activity上,另外也會放一個寫在Fragment上面的程式碼。
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();
}
});
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進行套用的。
在TextView上面的日期文字可以透過.getText
拿到自己當前所選擇的日期回覆。
dialog沒有輸入.show()
不會顯示出日期選擇的畫面