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

我想要做的是我正在制作一个人生游戏计划。 我想把时间拖延,并把它作为一个偏好,但我想让人们可以在特定的时间input。 该数字可以是毫秒或秒。

然而,我有点卡住如何继续,我一直没有find一个简单的首选项,已经处理这个,但可能有一个。 有一个简单的方法来使这个偏好,并确认input的数据是一个整数或漂浮?

如果您正在使用您可能是PreferenceActivity,没有一个可用。

你将需要做这样的事情:

/** * 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); } 

使用EditTextPreference并将inputtypes设置为TYPE_CLASS_NUMBER。 这将强制用户input数字而不是字母。

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

您也可以使用xml属性android:numeric来强制执行它。 该属性可能的相关值是decimalinteger

您也可以直接在您的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" />