您如何根据偏好创建开始时间和结束时间选择器?

Posted

技术标签:

【中文标题】您如何根据偏好创建开始时间和结束时间选择器?【英文标题】:How do you create start time & end time time pickers from preferences? 【发布时间】:2011-09-20 11:04:43 【问题描述】:

我想在首选项屏幕中设置时间选择器,并允许用户选择开始时间和结束时间,并将其存储为与其他设置一样的持久值。

您能否展示设置它所需的所有编码,因为我无法通过搜索找到类似的东西。

我在想也许时间选择器应该在对话框中,但我还不知道如何设置它们。如果您可以显示调用带有开始和结束时间选择器的对话框的编码,以及如何保存该信息以供以后从首选项屏幕检索,那就太好了。

我们将不胜感激所有帮助。

真的, 埃马德

【问题讨论】:

【参考方案1】:

我有一个简单的TimePreference,我在我的一本书中使用它:

import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TimePicker;

public class TimePreference extends DialogPreference 
  private int lastHour=0;
  private int lastMinute=0;
  private TimePicker picker=null;

  public static int getHour(String time) 
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[0]));
  

  public static int getMinute(String time) 
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[1]));
  

  public TimePreference(Context ctxt, AttributeSet attrs) 
    super(ctxt, attrs);

    setPositiveButtonText("Set");
    setNegativeButtonText("Cancel");
  

  @Override
  protected View onCreateDialogView() 
    picker=new TimePicker(getContext());

    return(picker);
  

  @Override
  protected void onBindDialogView(View v) 
    super.onBindDialogView(v);

    picker.setCurrentHour(lastHour);
    picker.setCurrentMinute(lastMinute);
  

  @Override
  protected void onDialogClosed(boolean positiveResult) 
    super.onDialogClosed(positiveResult);

    if (positiveResult) 
      lastHour=picker.getCurrentHour();
      lastMinute=picker.getCurrentMinute();

      String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);

      if (callChangeListener(time)) 
        persistString(time);
      
    
  

  @Override
  protected Object onGetDefaultValue(TypedArray a, int index) 
    return(a.getString(index));
  

  @Override
  protected void onSetInitialValue(boolean restoreValue, Object defaultValue) 
    String time=null;

    if (restoreValue) 
      if (defaultValue==null) 
        time=getPersistedString("00:00");
      
      else 
        time=getPersistedString(defaultValue.toString());
      
    
    else 
      time=defaultValue.toString();
    

    lastHour=getHour(time);
    lastMinute=getMinute(time);
  

此操作的生产级实现将为两个按钮标题使用字符串资源。它还可能对值进行更多的错误检查,以防某些代码通过SharedPreferences.Editor 更新它并且没有正确格式化它。

【讨论】:

感谢您的代码。我将尝试它并尝试弄清楚它是如何工作的。至少我会找出如何布置对话框屏幕并将其命名为 TimePreference,以便您的代码可以使用它。真的,埃马德 嗨,我一直在寻找一个示例 setting.xml 文件,该文件显示了开始时间和结束时间项,其中包含带有向下箭头的漂亮圆圈但不能找到任何东西。您是否有一些示例代码显示如何设置?谢谢。真的,埃马德 @Emad-ud-deen:对不起,我不知道你在说什么。 嗨 CommonsWare,我对 Android 编程和 Java 还很陌生,所以我想我需要帮助来设置其他文件,例如可能是带有用于按钮等的布局 xml 文件的 xml 文件. 来自 TimePreference 类。我还需要在清单文件中添加任何内容吗?你能告诉我如何在我的偏好活动中调用这个类吗?谢谢。真的,埃马德 感谢此代码。我建议您添加一件事:为了使默认值起作用,您需要在protected void onSetInitialValue() 中输入persistString(time);。让我疯狂地试图弄清楚为什么 PreferenceManager.setDefaultValues() 不起作用!我的修改:gist.github.com/nickaknudson/5024416

以上是关于您如何根据偏好创建开始时间和结束时间选择器?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择大于开始日期的结束日期(日期时间选择器)

如何在 ACF 日期选择器中限制 Wordpress 中的开始日期和结束日期的两个日期?

如何在不改变位置的情况下调整同一行中的两个 React 日期选择器

JavaScript变量等于jQuery选择器创建开始和结束标记。为什么?

在 XPages 中设置 Dojo 时间选择器的开始时间和结束时间

用于选择开始和结束日期的数据范围选择器