Pickers(选择器)

Posted yh_android_blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pickers(选择器)相关的知识,希望对你有一定的参考价值。

概述

安卓提供了现成的对话框,让用户选择一个时间或日期。每一个选择器控制时间(小时,分钟,AM/PM)或日期(月,日,年)的每一部分的选择。使用这些选择器帮助 确保用户正确的,格式化的,和适合的选择一个时间或日期。 我们推荐你使用 DialogFragment  来容纳每一个时间或日期选择器。 DialogFragment  为你管理对话框的生命周期并且允许你在不同的布局结构中显示该选择器,例如 手机中的基本对话框或在大屏幕中作为一部分嵌入。 尽管 DialogFragment是在安卓3.0(API 11)才第一次出现,如果你的应用支持3.0更早的版本——即使是安卓1.6——你可以在 support library使用 DialogFragment 来向后兼容。 :下面是示例代码展示了为 DialogFragment 使用 support library  API来如何 创建一个时间选择器和日期选择器。如果你的应用 minSdkVersion 是11或之上,你可以直接使用 DialogFragment .。

创建一个时间选择器

使用 DialogFragment来展示一个时间选择对话框( TimePickerDialog ),你需要定义一个继承自 DialogFragmentfragment 类,并且从该fragment的 onCreateDialog()方法中返回一个 TimePickerDialog:如果你的应用支持的版本为比安卓3.0更老,确保你的安卓工程使用了 support library

 将 DialogFragment延伸为时间选择器(time picker)

为一个 TimePickerDialog 定义一个 DialogFragment  ,你必须: 这里有个例子:
   
    
     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  类来了解更多关于该构造函数参数的信息 现在你所需要做的就是将这个fragment的实例添加到你的activity中。

展示时间选择器

一旦你像上面一样定义了一个 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");
    
    
     
    
   
该方法调在一个新的 DialogFragment引用中调用了 show()show()方法需要一个 FragmentManager的引用和该fragment的唯一的标签名。 警告:如果你的应用支持安卓3.0及其以下版本,确保你在调用 getSupportFragmentManager()  时获得了一个 FragmentManager .的引用。也应该确保你展示该时间选择器的activity继承了 FragmentActivity而不是标准的 Activity  类。

创建日期选择器(Date Picker)

创建日期选择对话框( DatePickerDialog )和创建时间选择对话框( TimePickerDialog . )相似。唯一的不同将在于为对话框创建的fragment。 为使用 DialogFragment来展示一个 DatePickerDialog  ,你需要定义一个继承自 DialogFragment  的 fragment类并且从fragment中的 onCreateDialog()方法中 返回一个 DatePickerDialog :如果你的应用支撑安卓3.0及更早的版本,确保你的工程中使用了安卓   support library  

DialogFragment 延伸为日期选择器(date picker)

DatePickerDialog 定义一个 DialogFragment,你必须: 下面是个示例:
   
    
     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类来 了解关于它构造函数参数的消息。 现在你只需要将这个fragment实例添加到你的activity中去了。

展示日期选择器

一旦你像上面展示的一样定义了一个 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的引用和fragment的唯一标签名。 警告如果你的应用支持安卓3.0及其以下版本,确保你在调用 getSupportFragmentManager()  时获得了一个 FragmentManager .的引用。也应该确保你展示该时间选择器的activity继承了 FragmentActivity 而不是标准的 Activity  类。






以上是关于Pickers(选择器)的主要内容,如果未能解决你的问题,请参考以下文章

Pickers应用程序

如何阻止 SwiftUI 视图变得比 superview 更宽

UIBUTTON 和选择器视图

使用材料 ui 键盘日期选择器动态设置日期

地区选择-三级联动

Espresso 测试无法处理 Pickers