web-dev-qa-db-ja.com

Androidをプログラムで使用して、EditText入力をバックスラッシュ(/)、tild(〜)などの特殊文字にソフトキーボードで制限する方法

キーボード用のアプリケーションを開発していますが、問題が発生しています。 Androidプログラムで、EditTextのソフトキーボードから特殊文字を制限/ブロックしたい。

だから、Androidの編集テキストでの特殊文字入力を制限する方法はありますか?.

誰でもアイデアがあれば、返信してください。

前もって感謝します。

45
jagdish

これを試してみてください

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 });
    }

}
74
Biraj Zalavadia

これは動作するはずです:

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});

または、簡単な方法を好む場合:

<EditText Android:inputType="text" Android:digits="0123456789*,qwertzuiopasdfghjklyxcvbnm" />
21
Solenya

スペースを追加する場合は、最後の桁の後にスペースを追加できます。

  Android:digits="0123456789qwertzuiopasdfghjklyxcvbnm "
19
Thirupathi

チェック this 表示されるリンクAndroid EditTextフィールドからの特殊文字を制限する方法?

このコードを試してくださいAndroid:digits="abcde.....012345789"これが最も簡単な方法だと思います。

18
i.n.e.f

その後半ですが、他の人に役立つかもしれません。プログラムの代わりに、xml属性を使用できます。シングルレイアウトでは多くのeditTextがあり、そのうち1つの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"/>
6
Tara

スペースを追加する際に問題に直面する可能性がある人のために、すべてのアルファベットで空白スペースを追加してください。以下に例を示します。この場合、ユーザーは新しい行を追加できないことも知っておく必要があります。

            <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" />
3
Hitesh Bisht

正規表現を作成し、onTextChangedメソッドで確認できます

yourEditText.addTextChangedListener(new TextWatcher() {

          public void afterTextChanged(Editable s) {

            // you can call or do what you want with your EditText here
            yourEditText. ... 

          }

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          public void onTextChanged(CharSequence s, int start, int before, int count) {}
       });
2
Anil Bhatiya

残念ながら、受け入れられたソリューションはすべての場合に機能するわけではありません。適切な解決策は、次のInputFilterを使用することです。

private InputFilter filter = new InputFilter() {
    // An example pattern that restricts the input only to the lowercase letters
    private static final Pattern restrictedChars = Pattern.compile("[a-z]*")

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        final CharSequence replacementText = source.subSequence(start, end);
        final CharSequence replacedText = dest.subSequence(dstart, dend);

        if (source == null || restrictedChars.matcher(replacementText).matches()) {
            return null; // Accept the original replacement
        }

        return replacedText; // Keep the original text
    }
};

このソリューションは、以下の問題を解決するという点で受け入れられているものとは異なります。

  • ソースのサブシーケンスのみが置換であり、完全なソースではありません
  • ソースは必ずしも新しく入力されたテキストのみを含むとは限らず、それまでに入力された全文である場合もあります
0
Marcin Jedynak

最初に文字を許可するためにDigitsKeyListenerを追加し、次にsetRawInputTypeをedittextフィールドに追加する必要があります

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


edit_field.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
0

特殊文字の入力を防ぐことができます:

yourEditText.addTextChangedListener(new TextWatcher() {
      CharSequence previous;
      public void afterTextChanged(Editable s) {
        if(s.toString().contains("&^%$#*&(")){
              s.clear();
              s.append(previous.toString());
        }
      }

      public void beforeTextChanged(CharSequence s, int start, int count, int after) {    
            previous = s;
      }

      public void onTextChanged(CharSequence s, int start, int before, int count) {}
   });
0
Prashant Jajal