如何在我的程序设计中通过软键盘将我的EditText输入限制为某些特殊字符,如反斜杠(/),tild(〜)等

jag*_*ish 49 android character android-softkeyboard android-edittext

我正在开发一个键盘应用程序,但我正在解决一个问题.我想以编程方式在android中的EditText中限制/阻止软键盘中的某些特殊字符.

那么,有没有什么办法可以限制android中编辑文本中的任何特殊字符输入.

如果有人有想法,请回复.

提前致谢.

Bir*_*dia 80

试试这个可能适合你

public class MainActivity extends Activity {

    private EditText editText;
    private String blockCharacterSet = "~#^|$%&*!";

    private InputFilter filter = new InputFilter() {

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

            if (source != null && blockCharacterSet.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText);
        editText.setFilters(new InputFilter[] { filter });
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 用户仍然可以将这些无效字符粘贴到edittext中 (2认同)

Sol*_*nya 24

这应该工作:

InputFilter filter = new InputFilter() { 
        public CharSequence filter(CharSequence source, int start, int end, 
Spanned dest, int dstart, int dend) { 
                for (int i = start; i < end; i++) { 
                        if (!Character.isLetterOrDigit(source.charAt(i))) { 
                                return ""; 
                        } 
                } 
                return null; 
        } 
}; 

edit.setFilters(new InputFilter[]{filter});
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢简单的方法:

<EditText android:inputType="text" android:digits="0123456789*,qwertzuiopasdfghjklyxcvbnm" />
Run Code Online (Sandbox Code Playgroud)


Thi*_*dav 21

如果要添加空格,可以在最后一位数后添加空格.

  android:digits="0123456789qwertzuiopasdfghjklyxcvbnm "
Run Code Online (Sandbox Code Playgroud)

  • 如果您在最后一位添加空格,则不会考虑。如果您想留出空间,请在数字或字母之间留出空间。不要给它,在结束和开始。 (3认同)

i.n*_*e.f 19

查看链接,其中显示如何限制Android EditText字段中的特殊字符?

试试这个代码, android:digits="abcde.....012345789"我猜这是最简单的方法.希望这对你有所帮助.


Tar*_*ara 6

它为时已晚,但可能对其他人有所帮助。您可以使用xml属性来代替programaticaly。可能的情况是,在“单一”布局中,您有许多editText,而您只想在一个EditText中限制特殊字符。因此,在xml中定义将对您有所帮助。这是通过限制特殊字符的代码,允许它们仅输入字母和数字,如下所示

<EditText
     android:id="@+id/editText"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:textSize="@dimen/text10"
     android:singleLine="true"
     android:maxLines="1"
     android:maxLength="16"
     android:digits="abcdefghijklmnopqrstuvwxyz0123456789"/>
Run Code Online (Sandbox Code Playgroud)


Hit*_*sht 5

对于那些在添加空间时可能遇到问题的人,请添加一个包含所有字母的空格。下面是一个示例 另外,您应该知道在这种情况下用户将无法添加新行。

            <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:digits="0123456789,a bcdefghijklmnopqrstuvwxyz"
            android:maxLines="1"
            android:singleLine="true" />
Run Code Online (Sandbox Code Playgroud)


小智 5

首先需要添加DigitsKeyListener以允许字符,然后将RawInputType设置为edittext字段

edit_field.setKeyListener(DigitsKeyListener.getInstance("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));


edit_field.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
Run Code Online (Sandbox Code Playgroud)