Пространство изображений в виджете?

#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 это не сработало, вам, вероятно, не повезло, если вы не хотите хранить изображения во внешнем хранилище или не хотите реализовать tiny ContentProvider , чтобы вы могли использовать content:// Uri значения (а затем сохранять изображения в своем getFilesDir() местоположении, чтобы ContentProvider они могли их обслуживать). Я даже не могу гарантировать, что они будут работать, но у них приличные шансы. Вы пытаетесь заставить какой-то внешний процесс отображать ваши изображения, и сразу может показаться, что ImageSpan этот сценарий не учитывался.