Подтвердить что ты не робот

Показать пользовательский смайлик в Android-клавиатуре

Я пытаюсь в течение последних 3 дней показывать графический пользовательский смайлик в представлении сообщений Android по умолчанию. Я успешно показал свои пользовательские смайлики вместо ключей. Теперь проблема в том, что я пытаюсь показать вытягиваемый в построении построителя строк. Но выталкиваемый просто не появляется на клавиатуре. Вот код:

     SpannableString ss = new SpannableString(" "); 
                    Drawable d = getResources().getDrawable(R.drawable.a); 
                    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
//                  ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); 
                    ImageSpan span = new ImageSpan(d);
//                  ss.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

                    mComposing.append(":");
                    mComposing.setSpan(new ImageSpan(d), 0,1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    getCurrentInputConnection().commitText(mComposing, 1);

Я пробовал разные методы, чтобы как-то подгонять выпадающий, но он просто не отображается в представлении сообщений по умолчанию для Android. Любая помощь будет высоко оценена.

4b9b3361

Ответ 2

Возможно, вы могли бы использовать:

String txt = "<img src=\"" + resourceID + "\"/>"; для создания тега HTML и после этого

Spanned spanned = Html.fromHtml(txt, emojiGetter, null);
editTextObj = setText(spanned,BufferType.SPANNABLE);

где emojiGetter есть

private ImageGetter emojiGetter = new ImageGetter() {
    public Drawable getDrawable(String source){
        int id = getResources().getIdentifier(source, "drawable", context.getPackageName());

        Drawable emoji = getResources().getDrawable(id);
        int w = (int)emoji.getIntrinsicWidth() ;
        int h = (int)emoji.getIntrinsicHeight() ;
        emoji.setBounds(0, 0, w, h);
        return emoji;
    }
};

Он отлично работает для меня. Я создал компонент CustomEditText, чтобы упростить это преобразование.

Ответ 3

Я достиг этого, делая это как

 ImageGetter imageGetter = new ImageGetter() 
                {
                    public Drawable getDrawable(String source) {
                        Drawable d = getResources().getDrawable(R.drawable.e041);
                        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
                        return d;
                    }
                };

                Spanned cs = Html.fromHtml("<img src='" + getResources().getDrawable(R.drawable.e041) + "'/>", imageGetter, null);

             getCurrentInputConnection().commitText(cs, 1); 

//но он переопределяет последний введенный текст, см. мой вопрос здесь