带数字选择器的Android PreferenceActivity对话框

暗淡

我已经看到了许多定制的解决方案和该问题的答案。我需要一个非常简单的东西,我有一个偏好设置活动,我所需要的只是其中一个选项将打开带有数字选择器的对话框并保存结果。您能否逐步指导我如何完成此任务?

public class SettingsActivity extends PreferenceActivity
{
    @Override
    protected void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
        //requestWindowFeature(Window.FEATURE_NO_TITLE);    
    }

    public static class MyPreferenceFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);

        }
    }

}

XML:

    <SwitchPreference
        android:key="cross"
        android:summaryOff="Cross is invisible"
        android:summaryOn="Cross is visible"
        android:switchTextOff="OFF"
        android:switchTextOn="ON"
        android:title="Cross" 
        android:defaultValue="true"/>

    <SwitchPreference
        android:key="autoP"
        android:summaryOff="App will go to sleep"
        android:summaryOn="App will not go to sleep"
        android:switchTextOff="OFF"
        android:switchTextOn="ON"
        android:title="Always On" 
        android:defaultValue="true"/>

    <SwitchPreference
        android:key="tempD"
        android:summaryOff="Temprature not displayed"
        android:summaryOn="Temprature displayed"
        android:switchTextOff="OFF"
        android:switchTextOn="ON"
        android:title="Tempature Display" 
        android:defaultValue="true"/>

    <ListPreference
        android:entries="@array/units"
        android:entryValues="@array/lunits"
        android:key="listUnits"
        android:summary="Units schosssing"
        android:title="Units" android:defaultValue="C"/>

     <!--Need to add button to open dialog-->       

</PreferenceScreen>

数字选择器XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="64dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numberPicker1"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="98dp"
        android:layout_toRightOf="@+id/numberPicker1"
        android:text="Cancel" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_marginRight="16dp"
        android:layout_toLeftOf="@+id/numberPicker1"
        android:text="Set" />

</RelativeLayout>
罗伯·梅威斯

子类DialogPreference构建自己的NumberPickerPreference

我为您实施了以下一项。它工作正常,但功能不完整。例如,最小值和最大值是硬编码的常数。这些实际上应该是首选项xml声明上的属性。为了使它起作用,您需要添加一个attrs.xml文件,指定您的自定义属性。

有关支持库项目中的自定义xml属性的NumberPicker首选项小部件的完整实现,以及演示如何使用它的演示应用程序,请参阅GitHub:https : //github.com/Alobar/AndroidPreferenceTest

除了必须完全限定名称之外,您可以将该小部件与其他任何首选项小部件一起使用:

preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <com.example.preference.NumberPickerPreference
        android:key="key_number"
        android:title="Give me a number"
        android:defaultValue="55" />

</PreferenceScreen>

NumberPickerPreference.java

package com.example.preference;

import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.NumberPicker;

/**
 * A {@link android.preference.Preference} that displays a number picker as a dialog.
 */
public class NumberPickerPreference extends DialogPreference {

    // allowed range
    public static final int MAX_VALUE = 100;
    public static final int MIN_VALUE = 0;
    // enable or disable the 'circular behavior'
    public static final boolean WRAP_SELECTOR_WHEEL = true; 

    private NumberPicker picker;
    private int value;

    public NumberPickerPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NumberPickerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected View onCreateDialogView() {
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.gravity = Gravity.CENTER;

        picker = new NumberPicker(getContext());
        picker.setLayoutParams(layoutParams);

        FrameLayout dialogView = new FrameLayout(getContext());
        dialogView.addView(picker);

        return dialogView;
    }

    @Override
    protected void onBindDialogView(View view) {
        super.onBindDialogView(view);
        picker.setMinValue(MIN_VALUE);
        picker.setMaxValue(MAX_VALUE);
        picker.setWrapSelectorWheel(WRAP_SELECTOR_WHEEL);
        picker.setValue(getValue());
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (positiveResult) {
            picker.clearFocus();
            int newValue = picker.getValue();
            if (callChangeListener(newValue)) {
                setValue(newValue);
            }
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        return a.getInt(index, MIN_VALUE);
    }

    @Override
    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
        setValue(restorePersistedValue ? getPersistedInt(MIN_VALUE) : (Integer) defaultValue);
    }

    public void setValue(int value) {
        this.value = value;
        persistInt(this.value);
    }

    public int getValue() {
        return this.value;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建数字选择器对话框?

来自分类Dev

Android singlechoiceitem对话框

来自分类Dev

Android多文件选择器/选择器对话框

来自分类Dev

在警报对话框中为数字选择器设置值

来自分类Dev

Android:如何从PreferenceActivity / PreferenceFragment外部打开ListPreference对话框?

来自分类Dev

更改数字选择器对话框的滚动方向

来自分类Dev

Python GTK:确认覆盖对话框阻止文件选择器对话框

来自分类Dev

无法创建日期选择器对话框

来自分类Dev

HTML中的颜色选择器对话框

来自分类Dev

我想使用对话框显示两个数字选择器

来自分类Dev

日期选择器对话框阴影的白色背景

来自分类Dev

如何创建颜色选择器对话框?

来自分类Dev

我想使用数字日期选择器对话框和时间选择器对话框

来自分类Dev

硒关闭文件选择器对话框

来自分类Dev

如何在对话框中使用数字选择器

来自分类Dev

Android singlechoiceitem对话框

来自分类Dev

时间选择器对话框

来自分类Dev

进度对话框Android

来自分类Dev

Android:如何从PreferenceActivity / PreferenceFragment外部打开ListPreference对话框?

来自分类Dev

更改数字选择器对话框Android的滚动方向

来自分类Dev

HTML中的颜色选择器对话框

来自分类Dev

带数字选择器的自定义布局对话框

来自分类Dev

Chromecast自定义选择器对话框

来自分类Dev

如何创建颜色选择器对话框?

来自分类Dev

如何从时间选择器对话框设置时间?

来自分类Dev

时间选择器对话框不起作用

来自分类Dev

对话框尺寸对于选择器来说太小

来自分类Dev

什么控制系统的保存对话框和文件选择器对话框?

来自分类Dev

更改日期选择器对话框主题

Related 相关文章

热门标签

归档