我应该使用什么android:inputType来inputIP地址?

我正在构build一个小型Android应用程序,用户将在其中inputIP地址或主机名到EditText小部件中。 90%的时间他们将input一个IP地址,其余的时间 – 一个主机名。

所以自然而然地,我想优化它们让他们很容易地inputIP地址,但是切换到用于主机名input的字母数字的能力是重要的。

我似乎无法find一个好的inputType。 numberDecimal最初似乎是一个很好的镜头,但它只允许一个点。

理想情况下,我想从一个标准键盘开始,按?123button。

我如何到达那里?

尝试使用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地址,但显然这意味着更多的工作。