【问题标题】:How to programmatically hide/disable emoticons on Android soft keyboard如何以编程方式隐藏/禁用 Android 软键盘上的表情符号
【发布时间】:2014-05-09 09:08:06
【问题描述】:

是否可以隐藏特定的键盘按钮?我有一个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"

这可能吗?

【问题讨论】:

  • 不,据我所知,您无法选择性地隐藏键盘按钮。设置 inputType 是您所能做的,但它取决于键盘应用程序如何处理 inputType。

标签: android android-edittext android-softkeyboard


【解决方案1】:

我在“Disabling smiley key on keyboards with the stock messaging app in ICS”中找到了一些东西。

您需要从inputType 中删除textLongMessage 选项。

大多数键盘上仍然有“:-)”按钮,但没有表情符号。

【讨论】:

  • 还有其他方法可以隐藏它吗??
【解决方案2】:

(为了完整起见)

此解决方案适用于需要在软键盘上没有笑脸的 textview 的人。 @Adrian 使用电子邮件地址类型的解决方案有效,但它会在键盘上显示不必要的“@”和“.com”按钮。我尝试了几种 InputType 组合,恕我直言,最好的解决方案是:

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

原键盘:

结果键盘:

【讨论】:

  • 这会删除 textAutoCorrect 和 textCapSentences 功能
  • 它在纵向模式下工作。在横向模式下,表情符号按钮向我显示
  • 为我工作,谢谢
  • 注意它不仅会禁用自动建议,还会完全隐藏切换语言。 RFC 6530 也允许电子邮件地址中的国际化字符。
  • 在xml中android:inputType="textVisiblePassword"
【解决方案3】:

这在 Android 4.4.2 上对我有用

android:inputType="textEmailAddress|textMultiLine"

【讨论】:

  • @HopefullyHelpful 你找到答案了吗?在 android 5 中它也不适合我
【解决方案4】:

来自 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});

参考“How to detect emoticons in EditText in android”。

【讨论】:

    【解决方案5】:

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

    android:inputType="textVisiblePassword|textNoSuggestions"
    

    【讨论】:

    • 如果 Android 设备上安装了密码管理器,它将在标记为“textVisiblePassword”的任何字段上显示弹出窗口。我在 Android 8 设备和应用程序“Keypass2Android”上看到了这个。
    【解决方案6】:
    
    mEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD| TEXT_MULTILINE); 
    

    【讨论】:

    • 请提供此代码 sn-p 的一些上下文,并可能解释为什么它改进了过去 6 年发布的其他答案。
    • TYPE_TEXT_VARIATION_VISIBLE_PASSWORD - 我们使用密码字符作为 EditTest 的文本输入。它没有 .com 和 @ 键等表情符号和电子邮件键 TEXT_MULTILINE - 这会将键盘布局按钮 [Done] 或 [->] 更改为 [Enter] 键,因此我们可以使用多行文本或换行功能。
    猜你喜欢
    • 2022-12-06
    • 1970-01-01
    • 2016-06-25
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多