您如何根据偏好创建开始时间和结束时间选择器?
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选择器创建开始和结束标记。为什么?