What android:inputType should I use for entering an IP Address?
我正在构建一个小型Android应用程序,用户将在其中将IP地址或主机名输入到EditText小部件中。 他们有90%的时间将输入IP地址,其余时间是主机名。
因此,自然而然地,我想进行优化以使其易于输入IP地址,但是切换到字母数字以输入主机名的能力很重要。
我似乎找不到一个好的inputType。 最初
理想情况下,我想从按下
我如何到达那里?
尝试使用
如果使用
输入时请查看此答案以进行验证。
通过添加android:inputType =" number | numberDecimal"和android:digits =" 0123456789",可以完美地使用数字和十进制键盘。
例
1 2 3 4 5 6 | <EditText android:id="@+id/ip_address" android:inputType="number|numberDecimal" android:digits="0123456789." android:layout_width="match_parent" android:layout_height="wrap_content"/> |
您可以使用自己的输入过滤器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | final EditText text = new EditText(ServerSettings.this); InputFilter[] filters = new InputFilter[1]; filters[0] = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (end > start) { String destTxt = dest.toString(); String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend); if (!resultingTxt.matches ("^\\d{1,3}(\\." + "(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { return""; } else { String[] splits = resultingTxt.split("\\."); for (int i=0; i<splits.length; i++) { if (Integer.valueOf(splits[i]) > 255) { return""; } } } } return null; } }; text.setFilters(filters); |
用这个 :
1 2 3 4 5 6 | <EditText android:id="@+id/txtIP" android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="0123456789." /> |
1 2 3 4 5 6 | <EditText android:id="@+id/ip_address" android:inputType="number|numberDecimal" android:digits="0123456789." android:layout_width="match_parent" android:layout_height="wrap_content"/> |
为我工作
您可以扩展DigitsKeyListener(源)并更改filter()函数(将检查ip模式或字符串主机名的验证)和getInputType()设置为
我认为您需要使用TextWatcher进行验证,并使用TextView.addTextChangedListener()方法进行注册,并使用Pattern.DOMAIN_NAME和Pattern.IP_ADDRESS(Android 2.2+)。
看到:
Android:如何验证EditText输入?
在Android中验证IP
我认为您唯一的选择是
1 | EditText android:inputType="text" ... /> |
您可以检查IP地址包含3个文本的文本
尝试使用
也许如果您使用2个单选按钮,一个显示主机的编辑文本,另一个显示IP的4个数字编辑文本,那么,一旦用户提交数据,您就将所有4个编辑文本值与它们之间的点连接起来,就像这样,edittext1.getText( )+"。 + edittext2.getText()+"。" edittext3.getText()+"。" edittext4.getText(),因此您可以像这样获得经过验证的IP地址,但显然它将意味着更多工作。