web-dev-qa-db-ja.com

プログラムで絵文字を無効にする方法Android

プログラムでキーボードから絵文字と自動提案を非表示にしたい。一部の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のスナップショットです:

enter image description here

ユーザーがsignInボタンをクリックしたときのレイアウトです。赤でマークされた左下のアイコンをタップすると、絵文字が候補として表示されるため、キーボードの高さが高くなります。

以下のスナップショットを参照してください:

enter image description here

プログラムでキーボードからこれらの上位の絵文字を非表示にする方法はありますか?

9
Ruchir

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

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

Android用のインプットメソッドエディター(ソフトキーボード)は数千とは言わないまでも数百あります。

絵文字を提供する必要はありません。必要なときに、いつでも好きなときに提供できます。

インプットメソッドエディタがEditTextに設定したanyフラグを尊重する必要はありません。したがって、入力方式エディターが絵文字入力をブロックする手段を提供する必要はありません。また、この機能を提供するものもあれば、提供しないものもあり、提供するものは異なるフラグを介して提供する場合があります。

キーボードに絵文字オプションを付けるかどうかの決定は、キーボードの開発者とユーザー(使用するキーボードを選択するユーザー)の間で行われます。投票はできません。

AFAIKの絵文字は単なるUnicode文字であり、他の場所(中国語のグリフなど)でUnicode文字をサポートする必要があるため、絵文字を避ける必要がある技術的な理由は不明です。とはいえ、絵文字に反対している場合は、入力されているテキストからそれらを除外することを試みてもかまいません(例:TextWatcher)。

2
CommonsWare

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
   }
}
1
abitcode

それはおそらく最良の解決策ではありませんが、以下のコードは私にとってはうまくいきました:

editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

パスワード入力タイプはフォントを変更するので、デフォルトの書体をそれに設定するだけです:

editText.setTypeface(Typeface.DEFAULT);
0
Alban Gashi