Android 正在检查共享prefs设置屏幕上的编辑文本
我想知道是否有办法检查共享优先/设置屏幕上输入的内容以进行验证。用户触摸Ip输入选项,弹出一个edittext对话框,我试图将他们可以输入的内容限制为标准Ip地址(即0-255.0-255.0-255.0-255.0-255)。我在许多在线论坛中都看到了使用正则表达式和模式的不同示例,这就是我到目前为止看到的,但绝对没有发生任何事情……有人能帮我吗?我将不胜感激Android 正在检查共享prefs设置屏幕上的编辑文本,android,regex,sharedpreferences,Android,Regex,Sharedpreferences,我想知道是否有办法检查共享优先/设置屏幕上输入的内容以进行验证。用户触摸Ip输入选项,弹出一个edittext对话框,我试图将他们可以输入的内容限制为标准Ip地址(即0-255.0-255.0-255.0-255.0-255)。我在许多在线论坛中都看到了使用正则表达式和模式的不同示例,这就是我到目前为止看到的,但绝对没有发生任何事情……有人能帮我吗?我将不胜感激 public class PrefsActivity extends PreferenceActivity implement
public class PrefsActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener
{
private EditTextPreference ipTextBox;
private String whatWasTyped;
private String previousText = "";
private Editor myEditor;
final Pattern IP_ADDRESS = Pattern
.compile("^((1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)\\.){3}(?:1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)$");
private String IP_FROM_PREFS = "ipAddressPref";
SharedPreferences prefs;
@Override
/**
* The onCreate method handles thing when starting this activity,
* mainly display the activity_settings.xml.
*/
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// pattern for IP address validation
addPreferencesFromResource(R.layout.activity_settings);
// prefs.registerOnSharedPreferenceChangeListener(this);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
// Get a reference to the preferences
ipTextBox = (EditTextPreference) getPreferenceScreen().findPreference(
IP_FROM_PREFS);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key)
{
// check prefs value for IP.
if (key.equals(IP_FROM_PREFS))
{
whatWasTyped = prefs.getString(IP_FROM_PREFS, "");
CharSequence s = whatWasTyped;
if (IP_ADDRESS.matcher(s).matches())
{
previousText = s.toString();
myEditor = prefs.edit();
myEditor.putString(IP_FROM_PREFS, previousText);
myEditor.commit();
} else
{
//if the format does not match, put up an error message
// or something.
}
}
}
@Override
protected void onResume()
{
super.onResume();
// Setup the initial values
// mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key,
// false) ? "Disable this setting" : "Enable this setting");
// mListPreference.setSummary("Current value is " +
// sharedPreferences.getValue(key, ""));
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
previousText = prefs.getString(IP_FROM_PREFS, "");
}
@Override
protected void onPause()
{
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
}
由于这是在shared prefs屏幕上创建的,因此没有按钮id等。只是写入
whatWasTyped.replace(s, previousText);
不会将以前的文本分配给SharedReference您需要将其分配回共享首选项并提交 是的,我刚想到这个。粗心的我!我会做出调整并回复。因此我对文件进行了一些编辑,缩短了模式,并在用户输入的内容格式良好时提交更改。我是通过myEditor完成的。在这一行中:addPreferencesFromResource(R.layout.activity\u settings);你应该把activity_settings.xml放在xml文件夹中,而不是布局文件夹对不起,我纠正了我的模式:\b(?:(:25[0-5]| 2[0-4]\d | 1\d{2}\d?\d)\{3}(?:25[0-5]| 2[0-4]\d | 1\d{2}\d?\b