Android中的首选项活动中的数字首选项

时间:2010-07-08 18:28:31

标签: android android-preferences preferenceactivity

我想做的是我正在制作一个生命游戏计划。我想花时间延迟并优先考虑,但我想让人们可以在特定时间输入。数字可以是几毫秒或几秒。

但是我有点坚持如何继续,我还没有找到一个已经处理过的简单偏好,但可能有一个。是否有一种简单的方法可以使这个偏好并确认输入的数据是整数还是漂浮?

5 个答案:

答案 0 :(得分:86)

使用EditTextPreference并将输入类型设置为TYPE_CLASS_NUMBER。这将强制用户输入数字而不是字母。

EditTextPreference pref = (EditTextPreference)findPreference("preference_name");
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);

答案 1 :(得分:38)

您还可以使用xml属性android:numeric强制执行该操作。此属性的可能相关值为decimalinteger

答案 2 :(得分:29)

您也可以直接在preferences.xml中执行此操作。像这样的东西会起作用:

<EditTextPreference
    android:defaultValue="100"
    android:dialogTitle="@string/pref_query_limit"
    android:inputType="number"
    android:key="pref_query_limit"
    android:summary="@string/pref_query_limit_summ"
    android:title="@string/pref_query_limit" />

答案 3 :(得分:17)

如果您使用的是PreferenceActivity,则可能没有。\ / p>

你需要做这样的事情:

    /**
 * Checks that a preference is a valid numerical value
 */
Preference.OnPreferenceChangeListener numberCheckListener = new OnPreferenceChangeListener() {

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        //Check that the string is an integer.
        return numberCheck(newValue);
    }
};

private boolean numberCheck(Object newValue) {
    if( !newValue.toString().equals("")  &&  newValue.toString().matches("\\d*") ) {
        return true;
    }
    else {
        Toast.makeText(ActivityUserPreferences.this, newValue+" "+getResources().getString(R.string.is_an_invalid_number), Toast.LENGTH_SHORT).show();
        return false;
    }
}


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

    //get XML preferences
    addPreferencesFromResource(R.xml.user_preferences);


    //get a handle on preferences that require validation
    delayPreference = getPreferenceScreen().findPreference("pref_delay");

    //Validate numbers only
    delayPreference.setOnPreferenceChangeListener(numberCheckListener);

}

答案 4 :(得分:1)

在Android Jetpack Preference中,事情发生了变化,要访问EditText,您必须这样访问

val preference = findPreference<EditTextPreference>(getString(R.string.pref_numdefault_key))
preference?.setOnBindEditTextListener {
    it.inputType = InputType.TYPE_CLASS_NUMBER
}