キーボード用のアプリケーションを開発していますが、問題が発生しています。 Androidプログラムで、EditTextのソフトキーボードから特殊文字を制限/ブロックしたい。
だから、Androidの編集テキストでの特殊文字入力を制限する方法はありますか?.
誰でもアイデアがあれば、返信してください。
前もって感謝します。
これを試してみてください
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 });
}
}
これは動作するはずです:
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" />
スペースを追加する場合は、最後の桁の後にスペースを追加できます。
Android:digits="0123456789qwertzuiopasdfghjklyxcvbnm "
チェック this 表示されるリンクAndroid EditTextフィールドからの特殊文字を制限する方法?
このコードを試してくださいAndroid:digits="abcde.....012345789"
これが最も簡単な方法だと思います。
その後半ですが、他の人に役立つかもしれません。プログラムの代わりに、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"/>
スペースを追加する際に問題に直面する可能性がある人のために、すべてのアルファベットで空白スペースを追加してください。以下に例を示します。この場合、ユーザーは新しい行を追加できないことも知っておく必要があります。
<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" />
正規表現を作成し、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) {}
});
残念ながら、受け入れられたソリューションはすべての場合に機能するわけではありません。適切な解決策は、次の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
}
};
このソリューションは、以下の問題を解決するという点で受け入れられているものとは異なります。
最初に文字を許可するためにDigitsKeyListenerを追加し、次にsetRawInputTypeをedittextフィールドに追加する必要があります
edit_field.setKeyListener(DigitsKeyListener.getInstance("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
edit_field.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
特殊文字の入力を防ぐことができます:
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) {}
});