ImageSpan не показывает изображение

#android #kotlin

#Android #kotlin

Вопрос:

Я хотел бы поместить небольшое анимированное изображение в конец абзаца пользовательского TextView, но оно не будет отображать изображение, когда я использовал следующий код:

 cmptDiag.setSpan(
  ImageSpan(context, R.drawable.diagpause_anim_gif, DynamicDrawableSpan.ALIGN_BASELINE),
  cmptDiag.length-2,
  cmptDiag.length-1,
  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
  

Я подозреваю, что был бы лучший вариант для «контекста», но не смог найти что-то подходящее для этого. getContext() не работает, и я не могу поместить «this» или «this@theCustomTextView».

Комментарии:

1. вы должны установить границы в своем drawable

2. пожалуйста, еще немного подсказки? Я не смог найти его в выпадающем меню.

3. Кажется, вы используете SPAN_EXCLUSIVE_EXCLUSIVE, это исключит как начальные, так и конечные символы. И я думаю, что если длина равна 0, span автоматически удаляется из текста. Вы можете попробовать изменить его на SPAN_INCLUSIVE_INCLUSIVE или изменить это значение 2 cmptDiag.length-2, cmptDiag.length-1, , чтобы убедиться, что длина диапазона не равна 0.

Ответ №1:

проверьте этот пример.

 class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val text = ("Lorem Ipsum is simply dummy text of the printing   and"  
                " typesetting industry. Lorem Ipsum   has been the industry's"  
                " standard dummy text ever since the 1500s, when an unknown"  
                " printer took a galley   of type and scrambled it"  
                " to make a type specimen book.").toSpannable()

        // Get icon from drawable resource
        var icon:Bitmap = BitmapFactory.decodeResource(resources,R.drawable.cfsuman)

        // Scale bitmap using android kotlin core ktx function
        icon = icon.scale(100,100,false)

        // Image span from drawable icon
        text[49..50] = ImageSpan(this,R.drawable.ic_weekend)

        // Another image span from bitmap
        text[89..90] = ImageSpan(this,icon)

        textView.text = text
    }
}
  

в этом примере изображения будут отображаться в текстах.

и если вы хотите добавить привязку, проверьте это.

 Drawable image = ContextCompat.getDrawable(mContext, android.R.drawable.presence_offline);
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
// Replace blank spaces with image icon
String myText = "myText";
int textLength = myText.length();
SpannableString sb = new SpannableString(myText   "   "   "This is another text");
ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
sb.setSpan(imageSpan, textLength, textLength   1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
  

этот пример «привязки» написан java. но я думаю, вы можете перейти на kotlin

Комментарии:

1. Спасибо за вашу любезную помощь! похоже, в пользовательских представлениях эти коды, включая мои, работают не так, как в activities. Я мог бы управлять ими для работы в activities. Я думаю, мне нужно изучить это немного позже..