1. 程式人生 > >Android官方文件—User Interface(Input Controls)(Pickers)

Android官方文件—User Interface(Input Controls)(Pickers)

選擇器

Android為使用者提供控制選擇時間或選擇日期作為隨時可用的對話方塊的控制元件。每個選擇器提供控制以選擇時間(小時,分鐘,上午/下午)或日期(月,日,年)的每個部分。使用這些選擇器有助於確保您的使用者可以選擇有效,格式正確的時間或日期,並根據使用者的區域設定進行調整。

我們建議您使用DialogFragment託管每個時間或日期選擇器。 DialogFragment為您管理對話方塊生命週期,並允許您以不同的佈局配置顯示選擇器,例如在手機上的基本對話方塊中或在大螢幕上作為佈局的嵌入部分。

雖然DialogFragment最初是在Android 3.0(API級別11)中新增到平臺的,但如果您的應用程式支援早於3.0的Android版本 - 甚至低至Android 1.6 - 您可以使用支援庫中提供的DialogFragment類來實現向後相容性。

注意:下面的程式碼示例顯示瞭如何使用DialogFragment的支援庫API為時間選擇器和日期選擇器建立對話方塊。如果您的應用的minSdkVersion為11或更高,則可以使用DialogFragment的平臺版本。

建立時間選擇器


要使用DialogFragment顯示TimePickerDialog,您需要定義一個擴充套件DialogFragment的片段類,並從片段的onCreateDialog()方法返回一個TimePickerDialog。

注意:如果您的應用支援早於3.0的Android版本,請確保使用支援庫設定Android專案,如設定要使用庫的專案中所述。

為時間選擇器擴充套件DialogFragment

要為TimePickerDialog定義DialogFragment,您必須:

  • 定義onCreateDialog()方法以返回TimePickerDialog的例項
  • 實現TimePickerDialog.OnTimeSetListener介面以在使用者設定時間時接收回調。

這是一個例子:

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 chosen by the user
    }
}

有關建構函式引數的資訊,請參閱TimePickerDialog類。

現在您只需要一個事件,將此片段的例項新增到您的活動中。

顯示時間選擇器

一旦定義瞭如上所示的DialogFragment,就可以通過建立DialogFragment的例項並呼叫show()來顯示時間選擇器。

例如,這是一個按鈕,當單擊它時,呼叫一個方法來顯示對話方塊:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pick_time"
    android:onClick="showTimePickerDialog" />

當用戶單擊此按鈕時,系統將呼叫以下方法:

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}

警告:如果您的應用程式支援低於3.0的Android版本,請確保呼叫getSupportFragmentManager()以獲取FragmentManager的例項。還要確保顯示時間選擇器的活動擴充套件了FragmentActivity而不是標準的Activity類。

建立日期選擇器


建立DatePickerDialog就像建立TimePickerDialog一樣。唯一的區別是您為片段建立的對話方塊。

要使用DialogFragment顯示DatePickerDialog,您需要定義一個擴充套件DialogFragment的片段類,並從片段的onCreateDialog()方法返回DatePickerDialog。

為日期選擇器擴充套件DialogFragment

要為DatePickerDialog定義DialogFragment,您必須:

  • 定義onCreateDialog()方法以返回DatePickerDialog的例項
  • 實現DatePickerDialog.OnDateSetListener介面以在使用者設定日期時接收回調。

這是一個例子:

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(getActivity(), this, year, month, day);
    }

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

有關建構函式引數的資訊,請參閱DatePickerDialog類。

現在您只需要一個事件,將此片段的例項新增到您的活動中。

顯示日期選擇器

一旦定義瞭如上所示的DialogFragment,就可以通過建立DialogFragment的例項並呼叫show()來顯示日期選擇器。

例如,這是一個按鈕,當單擊它時,呼叫一個方法來顯示對話方塊:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pick_date"
    android:onClick="showDatePickerDialog" />

當用戶單擊此按鈕時,系統將呼叫以下方法:

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

此方法在上面定義的DialogFragment的新例項上呼叫show()。 show()方法需要FragmentManager的例項和片段的唯一標記名稱。