Вставка изображений в TextView

| 29.10.2014

Если для какого-то экрана необходимо создать комбинацию текста и изображения, то целесообразно использовать несколько отдельных элементов ImageView и TextView, что позволит настроить именно такой layout, какой нужен (с нужными отступами, центровкой и т.п.). Однако, полезно знать и некоторые альтернативные способы вставки изображений непосредственно в TextView. Рассмотрим два способа.

1. Использование возможностей атрибутов TextView.

Можно использовать атрибут android:drawableLeft для вставки изображения слева текста:

<TextView
        android:drawableLeft="@drawable/ic_launcher"
        android:id="@+id/txt"
        android:text="@string/some_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

android:drawableLeft

Тот же результат будет с атрибутом android:drawableStart.

Атрибут android:drawableRight отобразит картинку справа.

<TextView
        android:drawableRight="@drawable/ic_launcher"
        android:id="@+id/txt"
        android:text="@string/some_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

android:drawableRight

Тот же результат будет с атрибутом android:drawableEnd.

Атрибут android:drawableTop отобразит картинку сверху:

<TextView
        android:drawableTop="@drawable/ic_launcher"
        android:id="@+id/txt"
        android:text="@string/some_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

android:drawableTop

С android:drawableBottom увидим изображение снизу.

<TextView
        android:drawableBottom="@drawable/ic_launcher"
        android:id="@+id/txt"
        android:text="@string/some_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

android:drawableBottom

2. Использование объектов типа SpannableString. Этот способ позволяет вставлять изображения динамически из java-кода. Однако, способ, на мой взгляд, не очень гибкий, поскольку «нормально» отформатировать отображение картинки и текста тут сложновато.

Пример:

package ru.androiddocs.imagespan;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;

import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TextView txtV = (TextView) findViewById(R.id.txt);
        // берем встроенную иконку share для создания объекта ImageSpan
        ImageSpan is = new ImageSpan(this, R.drawable.abc_ic_menu_share_holo_light,
                ImageSpan.ALIGN_BASELINE);
        // создаем из строкового ресурса объект типа SpannableString
        SpannableString text = new SpannableString(getResources().getString(R.string.some_text));
        // заменяем символы в строке с 3-позиции до 4 (т.е. один символ) иконкой, отсчет с 0
        text.setSpan(is, 3, 4, Spannable.SPAN_COMPOSING);
        // добавляем текст в TextView
        txtV.setText(text);
    }
}

Комментарии в самом коде. На выходе получим вот такой результат:

SpannableString

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*