我想做的是我正在制作一个生命游戏计划。我想花时间延迟并优先考虑,但我想让人们可以在特定时间输入。数字可以是几毫秒或几秒。
但是我有点坚持如何继续,我还没有找到一个已经处理过的简单偏好,但可能有一个。是否有一种简单的方法可以使这个偏好并确认输入的数据是整数还是漂浮?
答案 0 :(得分:86)
使用EditTextPreference并将输入类型设置为TYPE_CLASS_NUMBER。这将强制用户输入数字而不是字母。
EditTextPreference pref = (EditTextPreference)findPreference("preference_name");
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
答案 1 :(得分:38)
您还可以使用xml属性android:numeric
强制执行该操作。此属性的可能相关值为decimal
和integer
。
答案 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
}