我应该用什么android:inputType来输入IP地址?

Ang*_*ker 48 java android android-widget android-layout

我正在构建一个小型Android应用程序,用户将在EditText小部件中输入IP地址或主机名.90%的时间他们将输入IP地址,其余时间 - 主机名.

所以很自然地,我希望进行优化以便让他们轻松输入IP地址,但是切换到字母数字输入主机名的能力非常重要.

我似乎无法找到一个好的inputType.在numberDecimal最初似乎是个不错的射门,但只允许一个点.

理想情况下,我想从?123按下按钮的标准键盘开始.

我如何到达那里?

Bod*_*ous 55

尝试使用android:inputType="number",但也设置android:digits="0123456789.".适合我.

  • 使用Android 6.0,`number`没有显示点,而`numberDecimal`没有. (5认同)

Gra*_*eme 40

如果您使用inputType="phone"可以访问包含Numbers和Period字符的缩减键盘 - 这不会限制您可以输入的Periods数量的输入.

输入时请查看此答案以进行验证.

  • 在Android Marshmallow 23上,键盘上的句点按钮已被*和#替换.因此,inputType ="phone"不应用于IP地址输入字段.使用android:inputType ="numberDecimal"和android:digits ="0123456789." 而是在其他问题中建议的 (3认同)

Mun*_*oor 21

这通过添加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"/>
Run Code Online (Sandbox Code Playgroud)


SKT*_*SKT 13

您可以使用自己的输入过滤器

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);
Run Code Online (Sandbox Code Playgroud)


Ric*_*chi 6

用这个 :

<EditText
    android:id="@+id/txtIP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="0123456789."
 />
Run Code Online (Sandbox Code Playgroud)


sau*_*dav 5

<EditText
    android:id="@+id/ip_address"
    android:inputType="number|numberDecimal"
    android:digits="0123456789."
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

为我工作

  • 添加`android:digits="0123456789."` (2认同)

cod*_*e22 1

我认为你唯一的选择是..

EditText android:inputType="text" ... />
Run Code Online (Sandbox Code Playgroud)

您可以检查 IP 地址包含的 3 个点的文本