我想做的是开发一个生命游戏程序。我想将时间延迟变成一个用户可以设置的偏好选项,并且让用户可以输入特定的时间。输入的数字可以是以毫秒或秒计算。
然而,我不知道如何进一步操作。我没有找到一个能够简单处理这个问题的选择项,但也许有这样一个选项。有没有一种简单的方法来创建这个选项,并确认输入的数据是整数或浮点数?
我想做的是开发一个生命游戏程序。我想将时间延迟变成一个用户可以设置的偏好选项,并且让用户可以输入特定的时间。输入的数字可以是以毫秒或秒计算。
然而,我不知道如何进一步操作。我没有找到一个能够简单处理这个问题的选择项,但也许有这样一个选项。有没有一种简单的方法来创建这个选项,并确认输入的数据是整数或浮点数?
EditTextPreference pref = (EditTextPreference)findPreference("preference_name");
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
android:numeric
来强制执行它。 该属性的可能相关值为decimal
和integer
。EditTextPreference
没有 numeric
参数。 - Indrek KõueEditTextPreference
支持 EditText
的所有属性,并且我在我的项目中使用了这个属性。 - HRJ你也可以直接在 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" />
如果您正在使用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);
}
val preference = findPreference<EditTextPreference>(getString(R.string.pref_numdefault_key))
preference?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}
getEditText()
不再可用,XML属性也不起作用,请参见:https://issuetracker.google.com/issues/37060038。但是,可以像其他答案提到的那样使用setOnBindEditTextListener
来更改EditText上的设置。 - user905686