我应该使用什么android:inputType来inputIP地址?
我正在构build一个小型Android应用程序,用户将在其中inputIP地址或主机名到EditText小部件中。 90%的时间他们将input一个IP地址,其余的时间 – 一个主机名。
所以自然而然地,我想优化它们让他们很容易地inputIP地址,但是切换到用于主机名input的字母数字的能力是重要的。
我似乎无法find一个好的inputType。 numberDecimal
最初似乎是一个很好的镜头,但它只允许一个点。
理想情况下,我想从一个标准键盘开始,按?123
button。
我如何到达那里?
尝试使用android:inputType="number"
,还要设置android:digits="0123456789."
。 为我工作。
如果您使用inputType="phone"
,则可以访问包含Numbers和Period字符的减less键盘 – 这不会限制您input的期限数量的input。
进入时请看这个答案进行validation。
这可以通过添加android:inputType =“number | numberDecimal”和android:digits =“0123456789。
例
<EditText android:id="@+id/ip_address" android:inputType="number|numberDecimal" android:digits="0123456789." android:layout_width="match_parent" android:layout_height="wrap_content"/>
你可以使用你自己的inputfilter
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);
用这个 :
<EditText android:id="@+id/txtIP" android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="0123456789." />
我认为你唯一的select是..
EditText android:inputType="text" ... />
您可以检查IP地址包含的3个点的文本
我认为你需要使用TextWatcher进行validation,使用TextView.addTextChangedListener()方法注册它,并使用Pattern.DOMAIN_NAME和Pattern.IP_ADDRESS (Android 2.2+)。
看到:
Android:我如何validationEditTextinput?
在android中validationIP
您可以扩展DigitsKeyListener( source )并更改filter()函数(将检查ip模式或string主机名的validation),getInputType() return InputType.TYPE_CLASS_PHONE;
<EditText android:id="@+id/ip_address" android:inputType="number|numberDecimal" android:digits="0123456789." android:layout_width="match_parent" android:layout_height="wrap_content"/>
为我工作
也许如果你使用2个单选button,一个显示主机的edittext,另一个显示4个数字编辑文本的IP,然后,一旦用户提交数据,你concat所有4个edittext值之间的点,像这样,edittext1.getText )+“。” + edittext2.getText()+“。” edittext3.getText()+“。” edittext4.getText(),所以你可以获得一个validation的IP地址,但显然这意味着更多的工作。