#android
#Android
Вопрос:
Существуют ли какие-либо ограничения на добавление ImageSpan в виджет? Этот идентичный код отлично работает в стандартном TextView.
SpannableStringBuilder buf = new SpannableStringBuilder("");
if(!TextUtils.isEmpty(message.getMessageBody())) {
SmileyParser parser = SmileyParser.getInstance();
buf.append(parser.addSmileySpans(group ? message.getMessageBodyWithoutName() : message.getMessageBody()));
}
view.setTextViewText(R.id.message_body, buf);
Спасибо.
Редактировать 1:
public CharSequence addSmileySpans(CharSequence text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Matcher matcher = mPattern.matcher(text);
while (matcher.find()) {
int resId = mSmileyToRes.get(matcher.group());
builder.setSpan(new ImageSpan(mContext, resId),
matcher.start(), matcher.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return builder;
}
Комментарии:
1. Откуда берутся смайлики? IOW, что вы используете для
Uri
? И каковы ваши симптомы?2. Смайлики являются локальными ресурсами. Анализатор возвращает ImageSpan с заданным набором для рисования правильно (работает в нескольких других местах), просто виджет не отображается и вместо этого используется для ввода текста.
Ответ №1:
Смайлики являются локальными ресурсами.
Я собираюсь интерпретировать это буквально, что вы имеете в виду ваши изображения assets/
.
Я предполагаю, что на главном экране возникают трудности с разрешением ссылки на ваш ресурс. В качестве теста попробуйте поместить изображения во внешнее хранилище и использовать Uri.fromFile()
для создания своего Uri
. Если это сработает, попробуйте поместить их в качестве извлекаемых ресурсов и использовать идентификаторы ресурсов. Или попробуйте синтаксис ресурсов Uri
:
Uri.parse("android.resource://your.package.name.goes.here/" R.raw.myvideo);
Комментарии:
1. Прошу прощения, позвольте мне перефразировать утверждение. Изображения хранятся в drawable-mdpi / hdpi и ссылаются на их идентификатор ресурса, когда они создаются в new ImageSpan() . У виджета нет проблем с отображением любых других изображений, которые я использую для макета, содержимого, только когда я использую ImageSpan в TextView, он просто не работает. Я попробую ваш метод и сообщу о результатах.
2.@Tyler: Я думаю, что домашний экран при интерпретации an
ImageSpan
не понимает, что ему нужно получать его из ресурсов вашего приложения, а не из своих собственных.android.resource
Uri
Синтаксис может помочь вам решить эту проблему.3. Спасибо за рекомендацию, к сожалению, использование рекомендованного вами uri android.resource не сработало. Прежде чем я потрачу много времени на это исправление, возможно ли это вообще или здесь есть известное ограничение?
4.@Tyler: Если
android.resource
Uri
это не сработало, вам, вероятно, не повезло, если вы не хотите хранить изображения во внешнем хранилище или не хотите реализовать tinyContentProvider
, чтобы вы могли использоватьcontent://
Uri
значения (а затем сохранять изображения в своемgetFilesDir()
местоположении, чтобыContentProvider
они могли их обслуживать). Я даже не могу гарантировать, что они будут работать, но у них приличные шансы. Вы пытаетесь заставить какой-то внешний процесс отображать ваши изображения, и сразу может показаться, чтоImageSpan
этот сценарий не учитывался.