Android Picker
์ด ๊ธ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
์๋๋ก์ด๋๋ ์ฌ์ฉ์๊ฐ ์๊ฐ์ ์ ํํ๊ฑฐ๋ ๋ ์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ํ ์์๋ก ์ ํํ ์ ์๋ ์ปจํธ๋กค์ ์ ๊ณตํ๋ค. ๊ฐ Picker
๋ ์๊ฐ (์, ๋ถ, ์ค์ / ์คํ) ๋๋ ๋ ์ง (์, ์ผ, ๋
)์ ๋ถ๋ถ์ ์ ํํ๋ ์ปจํธ๋กค์ ์ ๊ณตํ๋ค. ์ด๋ ๊ฒ Picker
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ํจํ๊ณ , ํ์์ด ์ ํํ๋ฉฐ, ์ฌ์ฉ์ ์ง์ญ์ ๋ง๊ฒ ์กฐ์ ๋ ์๊ฐ ๋๋ ๋ ์ง๋ฅผ ์ ํํ ์ ์๋ค.
Android Developer์์๋ DialogFragment
๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ๊ณ ํ๋ค. DialogFragment
๋ Dialog
์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๋จ๋ง๊ธฐ์ ๊ธฐ๋ณธ dialog
๋๋ ํฐ ํ๋ฉด์ ๋ ์ด์์์ ํฌํจํ ๋ถ๋ถ๊ณผ ๊ฐ์ด ๋ค์ํ ๋ ์ด์์ ๊ตฌ์ฑ์ผ๋ก Picker
๋ฅผ ํ์ํ ์ ์๋ค. [^1]
DialogFragment
๋ Android 3.0(API ๋ ๋ฒจ 11) ๋ ์ฒ์ ์ถ๊ฐ๋์์ง๋ง, Android 1.6๋ณด๋ค ๋ฎ์ ๋ฒ์ ์ Android๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ Support Library์์ DialogFragment
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ง์ํ ์ ์๋ค.
Time Picker ๋ง๋ค๊ธฐ
DialogFragment
๋ฅผ ์ฌ์ฉํ์ฌ TimePickerDialog
๋ฅผ ํ์ํ๋ ค๋ฉด DialogFragment
๋ฅผ ์์๋ฐ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ๋ง๋ค๊ณ , TimePickerDialog
๋ฅผ ๋ฐํํ๋ onClreateDialog()
๋ฉ์๋๋ฅผ ์ ์ํด์ผ ํ๋ค.
Time Picker๋ฅผ ์ํ DialogFragment
์์ [^2]
TimePickerDialog
๋ฅผ ์ํ DialogFragment
๋ฅผ ์ ์ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
onCreateDialog()
๋ฉ์๋๋ฅผ ์ ์ํ๋ค. ์ด ๋ฉ์๋๋TimePickerDialog
์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.- ์ฌ์ฉ์๊ฐ ์๊ฐ์ ์ค์ ํ ๋ ์ฝ๋ฐฑ[^3]์ ์์ ํ๊ธฐ ์ํด
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 chosen by the user
}
}
์์ฑ์ ์ธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ TimePickerDialog
ํด๋์ค๋ฅผ ์ฐธ์กฐ.
์ด์ ํ๋๊ทธ๋จผํธ์ ์ธ์คํด์ค๋ฅผ ๋น์ ์ ์กํฐ๋นํฐ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. [^4]
Time Picker ๋ณด์ฌ์ฃผ๊ธฐ
์์ ํ์๋ ๊ฒ๊ณผ ๊ฐ์ DialogFragment
๋ฅผ ์ ์ํ ํ์๋ DialogFragment
์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ show()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ Time Picker๋ฅผ ํ์ํ ์ ์๋ค.
์๋์ ์ฝ๋๋ ํด๋ฆญํ๋ฉด Dialog
๋ฅผ ํ์ํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฒํผ์ด๋ค. [^5]
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_time"
android:onClick="showTimePickerDialog" />
์ฌ์ฉ์๊ฐ ์ด ๋ฒํผ์ ํด๋ฆญํ ๋, ์์คํ ์ ๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
fun showTimePickerDialog(v: View) {
TimePickerFragment().show(supportFragmentManager, "timePicker")
}
์ด ๋ฉ์๋๋ ์์ ์ ์๋ DialogFragment
์ ์ ์ธ์คํด์ค์ show()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. show()
๋ฉ์๋์์๋ FragmentManager
์ธ์คํด์ค์ Fragment
์ ๋ํ ๊ณ ์ ํ ํ๊ทธ ์ด๋ฆ์ด ํ์ํ๋ค.
Date Picker ๋ง๋ค๊ธฐ
DatePickerDialog
๋ฅผ ๋ง๋๋ ๊ฒ์ TimePickerDialog
๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ๋ค. The only difference is the dialog you create for the fragment.
DialogFragment
๋ฅผ ์ฌ์ฉํ์ฌ DatePickerDialog
๋ฅผ ํ์ํ๋ ค๋ฉด, DialogFragment
๋ฅผ ์์๋ฐ๊ณ DatePickerDialog
๋ฅผ ๋ฐํํ๋ onCreateDialog()
๋ฉ์๋๋ฅผ ์ ์ํ ํ๋๊ทธ๋จผํธ ํด๋์ค๋ฅผ ์ ์ํด์ผํ๋ค.
Date Picker๋ฅผ ์ํ DialogFragment
์์ [^6]
DatePickerDialog
๋ฅผ ์ํ DialogFragment
๋ฅผ ์ ์ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
onCreateDialog()
๋ฉ์๋๋ฅผ ์ ์ํ๋ค. ์ด ๋ฉ์๋๋DatePickerDialog
์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.- ์ฌ์ฉ์๊ฐ ๋ ์ง๋ฅผ ์ค์ ํ ๋ ์ฝ๋ฐฑ[^3]์ ์์ ํ๊ธฐ ์ํด
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(activity, this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
// Do something with the date chosen by the user
}
}
์์ฑ์ ์ธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ DatePickerDialog
ํด๋์ค๋ฅผ ์ฐธ์กฐ.
์ด์ ํ๋๊ทธ๋จผํธ์ ์ธ์คํด์ค๋ฅผ ์กํฐ๋นํฐ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. [^4]
Date Picker ๋ณด์ฌ์ฃผ๊ธฐ
์์ ํ์๋ ๊ฒ๊ณผ ๊ฐ์ DialogFragment
๋ฅผ ์ ์ํ ํ์๋ DialogFragment
์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ show()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ Date Picker๋ฅผ ํ์ํ ์ ์๋ค.
์๋์ ์ฝ๋๋ ํด๋ฆญํ๋ฉด Dialog
๋ฅผ ํ์ํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฒํผ์ด๋ค. [^5]
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pick_date"
android:onClick="showDatePickerDialog" />
์ฌ์ฉ์๊ฐ ์ด ๋ฒํผ์ ํด๋ฆญํ ๋, ์์คํ ์ ๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
fun showDatePickerDialog(v: View) {
val newFragment = DatePickerFragment()
newFragment.show(supportFragmentManager, "datePicker")
}
์ด ๋ฉ์๋๋ ์์ ์ ์๋ DialogFragment
์ ์ ์ธ์คํด์ค์ show()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. show()
๋ฉ์๋์์๋ FragmentManager
์ธ์คํด์ค์ Fragment
์ ๋ํ ๊ณ ์ ํ ํ๊ทธ ์ด๋ฆ์ด ํ์ํ๋ค.
[^1]: We recommend that you use DialogFragment to host each time or date picker. The DialogFragment manages the dialog lifecycle for you and allows you to display the pickers in different layout configurations, such as in a basic dialog on handsets or as an embedded part of the layout on large screens.
[^2]: Extending DialogFragment for a time picker
[^3]: 1.๋ค๋ฅธ ํจ์์ ์ธ์๋ก์จ ์ด์ฉ๋๋ ํจ์ 2.์ด๋ค ์ด๋ฒคํธ์ ์ํด ํธ์ถ๋์ด์ง๋ ํจ์
[^4]: Now all you need is an event that adds an instance of this fragment to your activity.
[^5]: For example, here's a button that, when clicked, calls a method to show the dialog:
[^6]: Extending DialogFragment for a date picker
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote