Help us understand the problem. What is going on with this article?

[Android] DatePickerDialogで年から選ばせるようにする方法

More than 1 year has passed since last update.

この記事について

この記事では、DatePickerDialogの初期表示が月日の選択であることによる問題と、DatePickerDialogで年から選ばせるようにする方法について書きます。

DatePickerDialogの初期表示は月日の選択

まず、以下のようなDatePickerDialogを使ったDialogFragmentの表示を考えます。

class DatePickerDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return DatePickerDialog(activity, null, 2018, 3, 29)
    }
}

このDialogFragmentは、APIレベル21(Lollipop)以降の端末で以下のように表示されます。

ここで、皆さんに問題です。たとえば「2000/4/29」という生年月日を入力する場合、2018年となっているところを2000年に変えたいですよね。年を変えたい時、ユーザーはどこをタップすれば良いでしょうか?

正解は、ここです。

水色の枠で囲んでいる年表示の部分をタップすると、以下のスクショのように年の選択モードになります。年を選択すると、月日の選択モードに戻ります。

めっちゃ、わかりにくくないですか?
ユーザーによっては年表示に切り替えられることに気づかずに、頑張って2000年までスワイプしてしまうかもしれません。

DatePickerDialogで年から選ばせる

そこで、最初から年選択の状態にしておけば、ユーザーは迷わず年を入力できると考えました。DatePickerDialogに選択モードを切り替えるメソッドは残念ながら提供されていませんでしたが、StackOverFlowに解決策がありました。
https://stackoverflow.com/a/46223200

以下のように年表示の部分をクリックするコードを書いてやれば、最初から年選択モードで表示できます。

class DatePickerDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val datePickerDialog = DatePickerDialog(activity, null, 2018, 3, 29)

        // 年の選択モードにする
        // Lollipop以前はspinnerモードなのでこの処理は不要
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            datePickerDialog.datePicker.touchables[0].performClick()
        }
        return datePickerDialog
    }
}

ただし、OSバージョンアップなどでDatePickerDialogの仕様が変わって、年表示のViewの位置が変わってしまった場合は、この方法は使えなくなると思われるので注意してください。

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away