私がやりたいのは、ライフゲームプログラムに取り組んでいることです。時間の遅れをとって好みにしたいのですが、特定の時間に入力できるようにしたいと思います。数値はミリ秒または秒で指定できます。
しかし、私はどのように進めるかについて少し行き詰まっており、すでにこれを処理している単純な設定を見つけることができませんでしたが、あるかもしれません。この設定を行い、入力されたデータが整数または浮動小数点であることを確認する簡単な方法はありますか?
私がやりたいのは、ライフゲームプログラムに取り組んでいることです。時間の遅れをとって好みにしたいのですが、特定の時間に入力できるようにしたいと思います。数値はミリ秒または秒で指定できます。
しかし、私はどのように進めるかについて少し行き詰まっており、すでにこれを処理している単純な設定を見つけることができませんでしたが、あるかもしれません。この設定を行い、入力されたデータが整数または浮動小数点であることを確認する簡単な方法はありますか?
EditTextPreferenceを使用して、入力タイプをTYPE_CLASS_NUMBERに設定します。これにより、ユーザーは文字ではなく数字を入力する必要があります。
EditTextPreference pref = (EditTextPreference)findPreference("preference_name");
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
xml属性を使用して強制することもできますandroid:numeric
。この属性に関連する可能性のある値はdecimal
、およびinteger
です。
で直接これを行うこともできます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);
}
Android Jetpackの設定で変更されたもので、EditTextにアクセスするには、次のようにアクセスする必要があります
val preference = findPreference<EditTextPreference>(getString(R.string.pref_numdefault_key))
preference?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}