我应该使用什么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地址,但显然这意味着更多的工作。