如何在Android中以编程方式禁用表情符号

htrmnn0y  于 2023-02-17  发布在  Android
关注(0)|答案(8)|浏览(172)

我想隐藏表情符号和键盘自动建议编程。它的工作在一些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());

以下是我的用户界面快照:

这是用户点击登录按钮时的布局。当用户点击左下角的红色图标时,键盘高度会根据表情符号的建议而增加。

参见以下快照:

有没有办法通过编程隐藏键盘上的那些顶级表情符号?

uqzxnwby

uqzxnwby1#

试试这个,对我很有效

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

ccrfmcuu2#

Android的输入法编辑器(又名软键盘)即使没有数千个,也有数百个。
没有人必须提供表情符号。欢迎那些提供表情符号的人提供他们想要的任何方式,任何时候。
输入法编辑器不需要荣誉你在EditText上设置的任何标志。因此,输入法编辑器也不需要提供任何阻止表情符号输入的方法。而且,即使有些输入法编辑器提供了这种功能,其他输入法编辑器可能没有,而那些提供这种功能的输入法编辑器可能通过不同的标志来阻止表情符号输入。
键盘上是否有表情符号选项的决定权在键盘开发者和用户(选择使用键盘的人)之间,你没有投票权。
由于AFAIK表情符号只是Unicode字符,而且您应该在其他地方支持Unicode字符(例如,汉字),因此不清楚您需要避免表情符号的技术原因。尽管如此,如果您反对表情符号,欢迎尝试将其从输入的文本中过滤掉(例如,使用TextWatcher)。

eqqqjvef

eqqqjvef3#

这可能不是最好的解决方案,但下面的代码为我工作得很好:

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

由于密码输入类型会更改字体,因此只需为其设置默认字体:

editText.setTypeface(Typeface.DEFAULT);
lsmd5eda

lsmd5eda4#

适用于安卓系统

mEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD| TEXT_MULTILINE);

TYPE_TEXT_VARIATION_VISIBLE_PASSWORD -我们使用密码字符作为EditTest的文本输入。它没有表情符号和电子邮件键,如.com和@键TEXT_MULTILINE -这将把键盘布局按钮[完成]或[-〉]更改为[回车]键,以便我们可以使用多行文本或新行功能。

以Xamarin形式

创建CustomRender并在OnElementChanged方法中

protected override void OnElementChanged(ElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

                if (Control != null)
                {
                    Control.ImeOptions = Android.Views.InputMethods.ImeAction.Done;
                    Control.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationVisiblePassword| Android.Text.InputTypes.TextFlagMultiLine;
                    Control.SetTypeface(Typeface.Default, TypefaceStyle.Normal);
                }
            }
watbbzwu

watbbzwu5#

这可能对你有帮助,它将禁用表情符号android:inputType="textShortMessage"。如果它没有帮助你,请告诉我

quhf5bfb

quhf5bfb6#

在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
   }
}
fgw7neuy

fgw7neuy7#

到目前为止最好的方法,并在您的XML良好的maaner工作写android:digits=“ABCDEFGHIJKLMNOPQRSTUVWXYZqwertyuiopasdfghjklmnbvcxz@.,1234567890”

jq6vz3qz

jq6vz3qz8#

试试这个

没有什么可以100%禁用表情符号。您只能隐藏键盘的默认emos无论是否有人正在使用自定义键盘,您不能隐藏自定义键盘的emos可能这会帮助您

editext.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

相关问题