如何在Android软键盘中编程隐藏/禁用表情符号

31

是否可能隐藏特定的键盘按钮?我有一个 EditText,在某些设备上它的键盘有笑脸符号,而在其他设备上则不存在。我想在所有设备上隐藏它。

以下是我 EditText 的 XML:

android:id="@+id/text_editor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/send_side"
android:hint="Enter your text"
android:imeOptions="actionSend|flagNoEnterAction"
android:inputType="textLongMessage|textAutoCorrect|textCapSentences|textMultiLine"
android:maxLength="1000"
android:maxLines="3"
android:nextFocusRight="@+id/send_button"
android:padding="12dp"
android:textSize="13sp"

这可能吗?


6
据我所知,您无法有选择性地隐藏键盘按钮。设置inputType是您能做的全部,但键盘应用程序会决定如何处理inputType。 - Xaver Kapeller
6个回答

14

还有其他的方法可以隐藏它吗? - Aditi Parikh

10

为了完整起见

这个解决方案适用于需要在软键盘中没有表情符号的文本视图的人们。 @Adrian的解决方案,使用电子邮件地址类型可以实现,但会在键盘上显示不必要的“@”和“.com”按钮。我尝试了几种InputType的组合,我认为最好的解决方案是:

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

原始键盘:

结果键盘:


2
这将移除textAutoCorrect和textCapSentences功能。 - Karn Patel
1
它在竖屏模式下工作正常。在横屏模式下,表情符号按钮会显示给我。 - Ankita Shah
对我有用,谢谢。 - Ahsanwarsi
1
要小心的是,它不仅会禁用自动建议,还会完全隐藏切换语言的选项。此外,RFC 6530允许在电子邮件地址中使用国际化字符。 - 林果皞
2
在xml中,android:inputType="textVisiblePassword" - nAkhmedov

1

这在我的Android 4.4.2上有效。

android:inputType="textEmailAddress|textMultiLine"

@HopefullyHelpful,你找到答案了吗?在我的安卓5上也无法工作。 - I.d007

1

来自Petr Daña的类似问题...这将启用自动完成并禁用所有表情符号。

InputFilter filter = new 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));
        //System.out.println("Type : " + type);
        if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {
            return "";
        }
    }
    return null;
    }
};

mMessageEditText.setFilters(new InputFilter[]{filter});

参考 "如何在Android的EditText中检测表情符号"。

0

我尝试了@Adrian的解决方案,但它包含“@”和“.com”键。我只需要一个可以接受用户名称的字段。我通过结合textVisiblePasswordtextNoSuggestions得到了我的解决方案:

android:inputType="textVisiblePassword|textNoSuggestions"

如果在Android设备上安装了密码管理器,它将在任何标记为“textVisiblePassword”的字段上显示一个弹出窗口。我在一个Android 8设备和应用程序“Keypass2Android”上看到了这个。 - Peter F

-1

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

3
请提供这段代码片段的一些背景信息,或许解释一下为什么它比过去六年中发表的其他答案要更好。 - miken32
TYPE_TEXT_VARIATION_VISIBLE_PASSWORD - 我们将密码字符用作EditText的文本输入。它没有表情符号和电子邮件键,如.com和@键。TEXT_MULTILINE - 这将更改键盘布局按钮[完成]或[->]为[Enter]键,这样我们就可以使用多行文本或换行功能。 - Gladis Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接