Android:PreferenceScreen中的TimePicker:向TimePicker发送数据

标签 android timepicker preference

我有一个 PreferenceScreen,其中 3 个首选项是 TimePreferencesTimePreference 是一个扩展DialogPreference 的自定义类,它包含一个TimePicker。我按照 THIS CODE 创建了它.

现在我想限制 TimePicker 输入。每个 TimePreference 都需要有一个特定的时间限制(这个限制在每个 TimePreference 中都会不同),我将使用这个限制来检查输入值。即,我可能希望第一个 TimePreference 低于 1 小时,第二个低于 5 小时,最后一个没有限制。

因为我想避免使用 3 个不同的类,所以我一直在寻找一种方法来将一些数据发送到首选项。我尝试使用 defaultValue,但当用户已经选择任何值时它为 null。

我的 PreferenceActivity 使用 PreferenceFragment。这是他们的代码:

public class PrefsActivity extends Activity {

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getFragmentManager().beginTransaction().replace(android.R.id.content,
            new PrefsFragment()).commit();
}

}

public class PrefsFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs_tod);
}

}

我可以将此数据发送到首选项吗?或者我应该有 3 个不同的类?

谢谢!

最佳答案

您可以使用附加属性创建自定义首选项,在您的情况下使用 limit 属性。

res/values/attrs.xml

<declare-styleable name="CustomPreference">
    <attr name="limit" format="integer"/>
</declare-styleable>

CustomPreference.java

public class CustomPreference extends DialogPreference {
private int limit;

public CustomPreference(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomPreference, 0, 0);
    limit = a.getInteger(R.styleable.CustomPreference_limit, 0);

    a.recycle();
}

在偏好布局中:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
   xmlns:app="http://schemas.android.com/apk/res/com.example.package">
    <PreferenceCategory>
        <com.example.package.CustomPreference
        android:key="@string/pref_key"
            android:title="@string/pref_title"
            app:limit="6" />
    </PreferenceCategory>
</PreferenceScreen>

您也可以通过编程方式设置属性值

关于Android:PreferenceScreen中的TimePicker:向TimePicker发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201853/

相关文章:

android - 如何检测屏幕镜像

jquery - 如何在将鼠标悬停在图标上时显示指针

c# - TimePicker 插件难以解析字符串

visual-studio-code - Visual Studio Code - 可以对 "OPEN EDITORS"面板进行排序吗?

android - SeekBar 首选项更改音量

java - android 文本不复制到剪贴板

android - 我们可以使用 Android 手机控制机器人吗?

android - 如何更改 ListView 的文本大小

javascript - 响应式 Bootstrap 3 时间选择器?

android - 如何从 android 上的音量首选项更改音量?