Показать собственный смайлик на клавиатуре 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);
Я пробовал разные методы, чтобы как-то соответствовать drawable, но он просто не будет отображаться в представлении сообщений Android по умолчанию. Любая помощь будет высоко оценен.
3 ответа
Может быть, это будет полезно: смайлики-клавиатура
Смотрите также: Реализация Emoji (смайлик) Вид / Раскладки клавиатуры
Может быть, вы могли бы использовать:
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, чтобы упростить это преобразование.
Я добился этого, делая так
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);
// но он перекрывает последний введенный текст, смотрите мой вопрос здесь