我正在使用此TimePickerPreference实现:http://www.ebessette.com/d/TimePickerPreference
效果很好。但我不知道如何为它设置默认值。因此,如果首次调用首选项,则应显示当前时间。 我还想扩展它,以显示标题中选择的时间。
在我的preference.xml中:
<com.example.preference.TimePickerPreference
android:key="quit_time"
android:dialogTitle="Quit"
android:title="Quit"/>
答案 0 :(得分:1)
也许此代码可以帮助您TimePickerPreference.java
答案 1 :(得分:0)
首先,我为我的英语道歉,我正在拉译员。我知道线程已经老了,但我今天搜索了这个问题的信息,而且nadia没有解决。如果发生在我身边的其他任何人,我会离开。这个组件还有一个错误,如果你取消插入的时间,这总是存储。同时评论您的解决方案。
让我们从主要事情开始,并不正是为什么他从不抛出默认值的设定者,最快的解决方案是手动控制元素构建器。我个人决定创建一个名为“timeByDefault”的新属性,该属性负责执行“defaultValue”的功能。
/**
* @param context
* @param attrs
*/
public TimePickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
handleCustomAttributes(context, attrs);
initialize();
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public TimePickerPreference(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
handleCustomAttributes(context, attrs);
initialize();
}
private void handleCustomAttributes(Context context, AttributeSet attrs){
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.TimePickerPreference);
CharSequence timeByDefaultCS = arr.getString(R.styleable.TimePickerPreference_timeByDefault);
if (null != timeByDefaultCS){
setTimeByDefault(timeByDefaultCS.toString());
}
}
public void setTimeByDefault(Object defaultValue) {
setDefaultValue(defaultValue);
}
现在我们在“/ res / values /”文件夹的“attrs.xml”文件中创建属性,并添加以下资源:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TimePickerPreference">
< attr name="timeByDefault" format="string" />
</declare-styleable>
</resources>
从xml访问新属性非常重要将在开头声明 xmlns:custom =“http://schemas.android.com/apk/res-auto”我们的xml文件的方式如下所示。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
>
<PreferenceCategory android:title="Notifications">
<com.mypackage.TimePickerPreference
android:key="KEY_TO_SAVE_THE_TIME_IN_PREFERENCE"
android:title="My custom title"
android:summary="My detail"
android:dialogTitle="My dialog title"
custom:timeByDefault="07:30"
/>
</PreferenceCategory>
</PreferenceScreen>
现在我将解释取消日期变更的问题:
打开对话框可让我们接受或取消新时间。无论您做什么,此组件都会接受始终时间。所以我创建了一个变量来临时存储真正引入的中间私有时间,直到接受该值。
private String tmpPersistString = "";
替换以下函数,如下所示:
@Override
public void onTimeChanged(TimePicker view, int hour, int minute) {
tmpPersistString = hour + ":" + minute;
}
同样我们控制何时按下两个按钮之一,当我们按下接受它然后我们存储新时间的值:
@Override
public void onClick(DialogInterface dialog, int which) {
super.getDialog().getCurrentFocus().clearFocus();
super.onClick(dialog, which);
if (which != -2){
persistString(tmpPersistString);
tmpPersistString = "";
}
}
虽然如果您有物理键盘,或者返回按钮或在窗口外点击,如果按下 ESC 键关闭对话框,则不必完全初始化临时变量接地。
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
tmpPersistString = "";
}
我只能希望你已经足够了解这个组件在开发时是一个不错的选择,它将对更多人有用。问候!