アプリに選択ツールを追加する

Android には、ユーザーが日時を選択するためのコントロールが用意されている ダイアログが表示されます。これらの選択ツールを使用して、 時間の一部(時、分、AM/PM)または日付(月、日、年)

<ph type="x-smartling-placeholder">で確認できます。 <ph type="x-smartling-placeholder">
</ph> material.io の時間選択ツールの例 <ph type="x-smartling-placeholder">
</ph> 図 1.モバイルのカレンダー選択ツールで選択した時間。

これらの選択ツールを使用すると、有効かつ正しい形式で、ユーザーの言語 / 地域に合わせた時刻または日付を選択できます。

material.io のモーダル日付選択ツールの例
図 2. モーダル日付選択ツール。

まず DialogFragment 日付の選択ツールをホストしますDialogFragment は 選択でき、さまざまなレイアウトで選択ツールを表示できます。 基本ダイアログ内で直接使用したり、画面の埋め込みパーツとして 大きな画面でもレイアウトを統一できます

時間選択ツールを作成する

メッセージを表示するには、 TimePickerDialog DialogFragment を使って、この変数を拡張するフラグメント クラスを DialogFragment を返し、TimePickerDialog を フラグメントの onCreateDialog() メソッドを呼び出します。

時間選択ツールの DialogFragment を拡張する

TimePickerDialogDialogFragment を定義する手順は次のとおりです。 次の操作を行います。

  • インスタンスを返す onCreateDialog() メソッドを定義する TimePickerDialog
  • 実装 TimePickerDialog.OnTimeSetListener ユーザーが時刻を設定した場合にコールバックを受け取るためのインターフェースです。

次の例をご覧ください。

Kotlin

class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current time as the default values for the picker.
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        // Create a new instance of TimePickerDialog and return it.
        return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity))
    }

    override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
        // Do something with the time the user picks.
    }
}

Java

public static class TimePickerFragment extends DialogFragment
                            implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker.
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it.
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time the user picks.
    }
}

詳細については、TimePickerDialog クラスをご覧ください。 引数。

ここで必要なのは、このフラグメントのインスタンスを できます。

時間選択ツールを表示する

前の例のような DialogFragment を定義した後は、 時間選択ツールを表示するには、次のように DialogFragment を呼び出して、 show() メソッドを呼び出します。

たとえばこのボタンは、タップするとメソッドを呼び出して ダイアログ:

<Button
    android:id="@+id/pickTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick time" />

ユーザーがこのボタンをタップすると、次のメソッドが呼び出されます。

Kotlin

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker")
}

Java

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker");
}

このメソッドは、インスタンスの新しいインスタンスで show() を呼び出します。 上記の例で定義されている DialogFragment。「 show() メソッドには、 FragmentManager フラグメントの一意のタグ名を指定します。

日付選択ツールを作成する

作成 DatePickerDialog TimePickerDialog を作成するようなものです。違いは 各要素を定義します。

DialogFragment を使用して DatePickerDialog を表示するには、次のようにします。 DialogFragment を拡張して フラグメントの onCreateDialog() からの DatePickerDialog メソッドを呼び出します。

日付選択ツールの DialogFragment を拡張する

DatePickerDialogDialogFragment を定義する手順は次のとおりです。 次の操作を行います。

  • インスタンスを返す onCreateDialog() メソッドを定義する DatePickerDialog
  • 実装 DatePickerDialog.OnDateSetListener ユーザーが日付を設定した場合にコールバックを受け取るためのインターフェースです。

次の例をご覧ください。

Kotlin

class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current date as the default date in the picker.
        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)

        // Create a new instance of DatePickerDialog and return it.
        return DatePickerDialog(requireContext(), this, year, month, day)

    }

    override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
        // Do something with the date the user picks.
    }
}

Java

public static class DatePickerFragment extends DialogFragment
                            implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker.
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it.
        return new DatePickerDialog(requireContext(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date the user picks.
    }
}

詳しくは、 DatePickerDialog クラスを参照してください。

必要なのは、このフラグメントのインスタンスを できます。

日付選択ツールを表示する

上記の例のように DialogFragment を定義した後、 日付選択ツールを表示するには、 DialogFragmentshow() の呼び出し。

たとえばこのボタンは、タップするとメソッドを呼び出して ダイアログ:

<Button
    android:id="@+id/pickDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick date"/>

ユーザーがこのボタンをタップすると、次のメソッドが呼び出されます。

Kotlin

findViewById<Button>(R.id.pickDate).setOnClickListener {
    val newFragment = DatePickerFragment()
    newFragment.show(supportFragmentManager, "datePicker")
}

Java

findViewById<Button>(R.id.pickDate).setOnClickListener {
    val newFragment = DatePickerFragment();
    newFragment.show(supportFragmentManager, "datePicker");
}

このメソッドは、インスタンスの新しいインスタンスで show() を呼び出します。 上記の例で定義されている DialogFragment。「 show() メソッドには FragmentManager のインスタンスが必要です。 フラグメントの一意のタグ名を指定します。

自動入力で選択ツールを使用する

2017 年、Android は 自動入力フレームワーク: ユーザーがデータを保存し、さまざまなアプリでフォームに入力できる場合。選択ツール ユーザーが入力候補を変更できる UI を提供することで、 日付または時刻データを格納するフィールドの値です。例: クレジット カード フォームでは、日付選択ツールを使用して、ユーザーは招待状の有効期限を入力または変更できます。 。

選択ツールはダイアログであるため、他のフィールドと一緒にアクティビティに表示されることはありません。選択ツールが表示されていないときに選択ツールデータを表示するには、 ビューには、 EditText, 選択ツールが表示されていないときに値を表示できます。

EditText オブジェクトはネイティブにデータ型の自動入力データを想定している AUTOFILL_TYPE_TEXT。 一方、自動入力サービスでは、データは AUTOFILL_TYPE_DATE 適切な表現を作成します。データの不整合を解決するには、 継承されるカスタムビューを作成することをおすすめします。 EditText を実装し、これらを正しく処理するために必要なメソッドを実装します。 AUTOFILL_TYPE_DATE 型の値。

次の手順に沿って、EditText のサブクラスを作成します。 AUTOFILL_TYPE_DATE 型の値を処理できます。

  1. EditText から継承するクラスを作成します。
  2. 実装 getAutofillType() メソッドを呼び出し、AUTOFILL_TYPE_DATE を返します。
  3. 実装 getAutofillValue() メソッドを呼び出し、 AutofillValue ミリ秒単位の日付を表すオブジェクトです。返品を作成するには 使用する場合は、 forDate() メソッドを使用して AutofillValue オブジェクトを生成します。
  4. 実装 autofill() メソッドを呼び出します。このメソッドは、 AutofillValue パラメータ(型) AUTOFILL_TYPE_DATE。パラメータを処理するには、Terraform で 文字列表現(mm/yyyy など)。文字列を使用する ビューに text プロパティを設定します。
  5. ユーザーが EditText のカスタム サブクラスで日付を編集するときに選択ツールを表示する機能を実装します。ビューが更新される 値の文字列表現を持つ text プロパティ ユーザーが選択ツールで選択した項目です。

次の処理を行う EditText のサブクラスの例: AUTOFILL_TYPE_DATE 値については、 Java または Kotlin

カスタムビューの自動入力サポートの実証について詳しくは、以下をご覧ください。 自動入力フレームワーク