从EditText覆盖表情符号并从我的Android应用程序

时间:2017-04-27 03:05:10

标签: android

我注意到谷歌在键盘上添加了一个表情符号快捷键(可能是很久以前在那里,但我只是注意到它:))。我试图从键盘上禁用表情符号快捷方式,并从我在应用程序中添加的图标中召唤这些相同的表情符号。它可行吗?

例如: Facebook Messenger应用程序有一个独立的图标按钮,仅用于表情符号,所以我的想法是使用一个独立的按钮,但使用已经提供的来自Google的表情符号。

到目前为止,我添加了可以点击的独立imageView图标,但是我试图让这个图标召唤谷歌表情符号如果最后​​一个可以被覆盖。

1 个答案:

答案 0 :(得分:1)

首先,将此属性添加到Edittext

android:inputType="textMultiLine"

这就是我在键盘上禁用表情符号的方法

public class EmojiExcludeEditText extends EditText {
    public EmojiExcludeEditText(Context context) {
        super(context);
        init();
    }

    public EmojiExcludeEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public EmojiExcludeEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setFilters(new InputFilter[]{emojiExcludeFilter});
    }

    @Override
    public void setFilters(InputFilter[] filters) {
        if (filters.length != 0) { //if length == 0 it will here return when init() is called
            boolean add = true;
            for (InputFilter inputFilter : filters) {
                if (inputFilter == emojiExcludeFilter) {
                    add = false;
                    break;
                }
            }
            if (add) {
                filters = Arrays.copyOf(filters, filters.length + 1);
                filters[filters.length - 1] = emojiExcludeFilter;
            }
        }
        super.setFilters(filters);
    }

    private EmojiExcludeFilter emojiExcludeFilter = 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;
        }
    }
}