Измерение размера изображения с помощью TextView и StaticLayout

У меня простой макет содержит только один TextView,

Я хочу загрузить изображение в TextView используя ImageSpan.

Ниже метод создает Spannable:

private Spannable getImageSpannable(int drawableId, int targetWidth, int targetHeight) {

    Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), drawableId);

    Bitmap bitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true);
    Drawable dr = new BitmapDrawable(getResources(), bitmap);
    dr.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

    Spannable imageSpannable = new SpannableString("\uFFFC");
    ImageSpan imgSpan = new ImageSpan(dr, DynamicDrawableSpan.ALIGN_BOTTOM);

    imageSpannable.setSpan(imgSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return imageSpannable;
}

Я использую этот метод для создания контента, как это:

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, 100, 260));
    content.append("\n");

    txtContent.setText(content);
}

Когда я звоню setContent() Метод мой результат примерно так:

Небольшой зазор над ImageSpan

Как видите, между ImageSpan и вершиной TextView,

Это не межстрочный интервал, потому что я установил межстрочный интервал в 0.

И что интересно, когда я удаляю "\n" из содержимого (объявленного в методе setContent), это пространство исчезает.

И еще один момент, когда я пытался измерить размер контента с помощью StaticLayoutс "\n" в конце нижней строки 0 возвращает 270, а без "\n" возвращает 260.

Такое поведение вызывает некоторые трудности для меня, потому что я должен измерить текст и ImageSpan, используя StaticLayout и решить, в кого можно вписаться TextView,

Я ценю, что каждый может мне помочь.

Благодарю.

Вот мой xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/txtContent"
    android:layout_width="300dp"
    android:layout_height="500dp"
    android:background="#fed9f4"
    android:textSize="22sp"/>
</LinearLayout>

Я провел несколько тестов и обнаружил, что размер шрифта влияет на рендеринг ImageSpan.

Может кто-нибудь объяснить это влияние, пожалуйста?

1 ответ

Я надеюсь, что этот метод работает

Следующая строка кода

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, 100, 260));
    content.append("\n");

    txtContent.setText(content);
}

Изменить на

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    content.append("\n");

    txtContent.setText(content);
}

И измените размеры "R.drawable.my_image"

Другие вопросы по тегам