앱에 선택 도구 추가

Android는 사용자가 시간 또는 날짜를 선택할 수 있는 컨트롤을 제공합니다. 있습니다. 이러한 선택 도구에서는 각 항목을 선택할 수 있는 컨트롤을 제공합니다. 시간 (시, 분, 오전/오후) 또는 날짜 (년, 월, 일)의 일부.

<ph type="x-smartling-placeholder">를 통해 개인정보처리방침을 정의할 수 있습니다. <ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">Material.io의 시간 선택 도구 예</ph> <ph type="x-smartling-placeholder">
</ph> 그림 1. 모바일 캘린더 선택 도구에서 시간 선택

이러한 선택 도구를 사용하면 사용자가 유효하고 올바르게 형식이 지정되었으며 사용자의 언어로 조정된 시간이나 날짜를 선택할 수 있습니다.

Material.io의 모달 날짜 선택 도구의 예
그림 2. 모달 날짜 선택도구

DialogFragment 각 시간 또는 날짜 선택 도구를 호스팅합니다. DialogFragment는 대화상자 수명 주기를 자동으로 관리하며 선택 도구를 다양한 레이아웃으로 표시할 수 있습니다. 구성(예: 핸드셋의 기본 대화상자 또는 큰 화면에서의 레이아웃입니다.

시간 선택 도구 만들기

표시 방법: TimePickerDialog DialogFragment를 사용하여 확장되는 프래그먼트 클래스 정의 DialogFragmentTimePickerDialog 프래그먼트의 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.
    }
}

자바

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")
}

자바

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.
    }
}

자바

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")
}

자바

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

이 메서드는 새 인스턴스에서 show() 을 호출합니다. 이전 예시에 정의된 DialogFragment입니다. 이 show() 메서드에 FragmentManager 인스턴스가 필요합니다. 고유한 태그 이름을 지정해야 합니다.

자동 완성으로 선택 도구 사용

2017년 Android는 자동 완성 프레임워크를 통해 사용자가 여러 앱에서 양식을 작성하는 데 사용할 수 있는 데이터를 저장합니다. 선택 도구 자동 완성 시나리오에서 유용하게 사용할 수 있습니다. 날짜 또는 시간 데이터를 저장하는 필드의 값입니다. 예를 들어 신용카드나 양식에서 날짜 선택 도구를 사용하면 신용카드.

선택 도구는 대화상자이므로 다른 필드와 함께 활동에 표시되지 않습니다. 선택 도구가 표시되지 않을 때 선택 도구 데이터를 표시하려면 다음 단계를 따르세요. 다른 뷰 사용(예: 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 매개변수를 처리하려면 적절한 문자열 표현입니다(예: mm/yyyy). 문자열 사용 표현을 사용하여 뷰의 text 속성을 설정합니다.
  5. 사용자가 EditText의 맞춤 서브클래스에서 날짜를 수정하려고 할 때 선택 도구를 표시하는 기능을 구현합니다. 뷰가 업데이트됩니다. 값의 문자열 표현이 있는 text 속성 입력됩니다.

다음을 처리하는 EditText 서브클래스의 예 AUTOFILL_TYPE_DATE 값의 경우 자동 완성 프레임워크 샘플을 참고하세요. 자바 또는 Kotlin을 사용합니다.

맞춤 뷰의 자동 완성 지원에 관한 자세한 내용은 다음을 참고하세요. 자동 완성 프레임워크.