プログラムでキーボードから絵文字と自動提案を非表示にしたい。一部のAndroid=デバイスでは機能しますが、すべてのデバイスでは機能しません。自動提案を非表示にするための私のコードは次のとおりです。
txtSingupemail.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
txtSignuppwd.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_VARIATION_PASSWORD);
txtSignuppwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
これが私のUIのスナップショットです:
ユーザーがsignInボタンをクリックしたときのレイアウトです。赤でマークされた左下のアイコンをタップすると、絵文字が候補として表示されるため、キーボードの高さが高くなります。
以下のスナップショットを参照してください:
プログラムでキーボードからこれらの上位の絵文字を非表示にする方法はありますか?
これを試してみてください
editText.setFilters(new InputFilter[]{new EmojiExcludeFilter()});
private class EmojiExcludeFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
int type = Character.getType(source.charAt(i));
if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {
return "";
}
}
return null;
}
}
Android用のインプットメソッドエディター(ソフトキーボード)は数千とは言わないまでも数百あります。
絵文字を提供する必要はありません。必要なときに、いつでも好きなときに提供できます。
インプットメソッドエディタがEditText
に設定したanyフラグを尊重する必要はありません。したがって、入力方式エディターが絵文字入力をブロックする手段を提供する必要はありません。また、この機能を提供するものもあれば、提供しないものもあり、提供するものは異なるフラグを介して提供する場合があります。
キーボードに絵文字オプションを付けるかどうかの決定は、キーボードの開発者とユーザー(使用するキーボードを選択するユーザー)の間で行われます。投票はできません。
AFAIKの絵文字は単なるUnicode文字であり、他の場所(中国語のグリフなど)でUnicode文字をサポートする必要があるため、絵文字を避ける必要がある技術的な理由は不明です。とはいえ、絵文字に反対している場合は、入力されているテキストからそれらを除外することを試みてもかまいません(例:TextWatcher
)。
Kotlinで、入力フィルターをEdittextに追加します。数字やアルファベットをすばやく入力すると問題が発生しました。このコードはそれを解決します
editText.filters = editTextAllowAlphabetsSymbols("") // Add any symbols that you wish to allow
次にこれ
fun editTextAllowAlphabetsSymbols(symbols:String):Array<InputFilter>{
return arrayOf(AlphabetsSymbolsInputFilter(symbols))
}
そして最後に
class AlphabetsSymbolsInputFilter(symbols:String) : InputFilter {
private var mWordPattern: String
var mLetterPattern:String
init {
mLetterPattern = "[a-zA-Z.$symbols ]"
//mLetterPattern = "[a-zA-Z0-9.$symbols ]" // replace if alphanumeric
mWordPattern = "$mLetterPattern+"
}
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
if(source == ""){
println("In backspace")
return source
}
if(source.isNotEmpty() && source.toString().matches(mWordPattern.toRegex())){
return source
}
var sourceStr = ""
if(source.isNotEmpty() && !source.toString().matches(mLetterPattern.toRegex())){
sourceStr = source.toString()
while(sourceStr.isNotEmpty() && !sourceStr.matches(mWordPattern.toRegex())){
println(" source --> $source dest ---> $dest")
if(sourceStr.last().isDigit()) {
print("Is digit ")
sourceStr = sourceStr.subSequence(0, sourceStr.length - 1).toString()
}
else if(!sourceStr.last().toString().matches(mLetterPattern.toRegex())) {
print("Is emoji or weird symbols")
sourceStr = sourceStr.subSequence(0, sourceStr.length - 1).toString()
}else
break
}
return sourceStr
}
return source
}
}
それはおそらく最良の解決策ではありませんが、以下のコードは私にとってはうまくいきました:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
パスワード入力タイプはフォントを変更するので、デフォルトの書体をそれに設定するだけです:
editText.setTypeface(Typeface.DEFAULT);