公司要求在Android Settings(设置)程序下的“无线和网络”下增加FM发射的菜单,主要实现FM设备打开/关闭、设置发射频率几个简单功能。其中有个问题是,输入发射频率时,只能输入数值87.0~108.0的数值范围,我想在程序中限制只能输入5个字母,只允许输入以下字母:
{'0', '1', '2', '3', '4', '5','6','7', '8', '9', '.'}
代码实现如下:
import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.DialogInterface; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.widget.TextView; import android.widget.EditText; import android.text.InputFilter; import android.text.InputType; import android.text.Spanned; import android.text.method.NumberKeyListener; import android.util.Log; import java.lang.String; import java.lang.CharSequence; import java.lang.Number; import java.lang.Integer; import java.lang.Float; public class FmTxPreferenceChangeListener implements Preference.OnPreferenceChangeListener{ private CheckBoxPreference mCheckBox; private EditTextPreference mEditText; private EditText editText; PreferenceActivity mActivity; public FmTxPreferenceChangeListener(PreferenceActivity preferenceActivity, CheckBoxPreference checkBoxP, EditTextPreference editTextP){ Log.d("EditTextListener","FmTxPreferenceChangeListener"); mCheckBox = checkBoxP; mEditText = editTextP; mActivity = preferenceActivity; checkBoxP.setOnPreferenceChangeListener(this); editTextP.setOnPreferenceChangeListener(this); editText = mEditText.getEditText(); /*查阅文档发现EditTextPreference也extent了EditText, 可以通过EditTextPreference的方法getEditText()获取EditText, 然后通过调用EditText的方法InputFilter实现字符串过滤、限制输入长度 */ editText.setFilters(new InputFilter[]{ new InputFilter(){ @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // TODO Auto-generated method stub /*这里可以作输入字符串替换的功能,如输入的是密码,可以把所有输入变成"*"号*/ return null; } }, new InputFilter.LengthFilter(5)/*这里限制输入的长度为5个字母*/ } ); editText.setKeyListener(new NumberKeyListener() { @Override public int getInputType() { return InputType.TYPE_MASK_VARIATION; } @Override protected char[] getAcceptedChars() {/*这里实现字符串过滤,把你允许输入的字母添加到下面的数组即可!*/ return new char[]{'0', '1', '2', '3', '4', '5','6','7', '8', '9', '.'}; } }); } public boolean onPreferenceChange(Preference preference, Object value) { /*当Preference改变时,这里会回调,可以判断当前改变的是CheckBoxPreference,还是CheckBoxPreference*/ return true;/**返回true表示允许改变设置,返回false表示不允许改变当前设置/ } }
关键字:
EditTextPreference InputFilter过滤字符串的实现,
EditTextPreference InputFilter过滤输入字符串的实现,
EditTextPreference InputFilter限制输入长度,
EditTextPreference InputFilter输入替换的实现,
EditTextPreference CheckBoxPreference共用PreferenceChangeListener