Добавление текста в ImageView в Android

Я хочу использовать ImageView, чтобы причудливо показать какое-то сообщение.

Как добавить текст в ImageView?


person Shashi    schedule 04.08.2010    source источник


Ответы (9)


Чтобы добавить текст к вашему ImageView, вы можете сделать это:

<RelativeLayout> // Only works inside a RelativeLayout
    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/myImageSouce" />

    <TextView
        android:id="@+id/myImageViewText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/myImageView"
        android:layout_alignTop="@+id/myImageView"
        android:layout_alignRight="@+id/myImageView"
        android:layout_alignBottom="@+id/myImageView"
        android:layout_margin="1dp"
        android:gravity="center"
        android:text="Hello"
        android:textColor="#000000" />
 </RelativeLayout>
person Alesqui    schedule 25.11.2011
comment
PS.: Должен быть внутри RelativeLayout - person Alesqui; 08.06.2012
comment
лучше включить этот PS в пост. Без вашего PS не работает :) - person mente; 25.07.2013
comment
Это не рекомендуется, поскольку при этом создаются дополнительные макеты. Используйте TextView, как предложено в других ответах. - person Tautvydas; 17.11.2014
comment
Мне пришлось использовать это, но переключение на TextView решило это без каких-либо проблем, я думаю, намного проще. - person George; 29.09.2017

Вы также можете использовать TextView и установить фоновое изображение на то, что вы хотели в файле ImageView. Кроме того, если вы использовали ImageView в качестве кнопки, вы можете настроить ее так, чтобы она нажималась.

Вот базовый код для TextView, который показывает изображение с текстом поверх него.

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/your_image"
    android:text="your text here" />
person Barrie Galitzky    schedule 17.09.2012
comment
Проблема в том, что фон не масштабируется. - person Jesus Dimrix; 30.04.2014
comment
@IgorGanapolsky: что?! он доступен на ВСЕХ уровнях API, начиная с 1. - person Phantômaxx; 25.09.2014

Лучший вариант использования текста и изображения в одном представлении:

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:drawableBottom="@drawable/ic_launcher"

        android:text="TextView" />
person Sagar V.    schedule 01.07.2013

Используйте drawalbeLeft/Right/Bottom/Top в TextView для рендеринга изображения в соответствующей позиции.

        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/image"    
        android:text="@strings/text" 
        />
person Pawan Maheshwari    schedule 30.07.2013
comment
Изображение будет рядом с TextView, но не поверх него. - person IgorGanapolsky; 08.08.2014
comment
лучший ответ - это использование drawableTop, drawableBottom,... в TextView - person Obtice; 22.10.2019

Я знаю, что этот вопрос был и ушел, но если кто-то еще наткнулся на это, я хотел бы сообщить им об этом. Это может показаться неинтуитивным, но вы можете использовать кнопку с кликабельным значением false или что-то в этом роде. Это связано с тем, что кнопка позволяет установить drawableLeft, drawableRight, drawableTop и т. д. в дополнение к тексту.

  <Button
  android:id="@+id/button1"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/border_box1"
  android:drawableLeft="@drawable/ar9_but_desc"
  android:padding="20dp"
  android:text="@string/ar4_button1"
  android:textColor="@color/white"
  android:textSize="24sp" />

Новая информация: кнопка может иметь значки в drawableLeft, drawableRight, drawableTop и drawableBottom. Это делает стандартную кнопку гораздо более гибкой, чем кнопку с изображением. Левое, правое, верхнее и т. д. — это отношение к тексту на кнопке. Вы можете иметь несколько рисунков на кнопке, например, один слева, один справа и текст посередине.

person Community    schedule 04.10.2013
comment
Что такое android:drawableLeft здесь? - person IgorGanapolsky; 08.08.2014
comment
Я добавил некоторые комментарии выше. - person Andrew S; 09.08.2014

Чтобы нарисовать текст прямо на холсте, сделайте следующее:

  1. Создайте член объекта Paint в конструкторе myImageView

    Paint mTextPaint = new Paint();
    
  2. Используйте canvas.drawText в своем методе myImageView.onDraw():

    canvas.drawText("My fancy text", xpos, ypos, mTextPaint);
    

Изучите документацию по классам Paint и Canvas, чтобы добавить необычные эффекты.

person Peter    schedule 14.03.2012
comment
не могли бы вы помочь мне в обратном порядке, я имею в виду, как получить текст существующего ImageView (который нарисован выше) в Android? - person aida; 26.04.2016

С помощью FrameLayout вы можете поместить текст поверх представления изображения, макет фрейма содержит как imageView, так и textView.

Если этого недостаточно и вы хотите что-то более причудливое, например, «рисование» текста, вам нужно нарисовать текст на холсте — образец здесь: Как нарисовать текст RTL (арабский) на растровом изображении и упорядочить его правильно?

person Mathias Conradt    schedule 04.08.2010

Вы можете использовать TextView для той же цели, но если вы хотите использовать то же самое с ImageView, вам нужно создать класс и расширить ImageView, а затем использовать метод onDraw() для рисования текста на холсте. для получения более подробной информации посетите http://developer.android.com/reference/android/graphics/Canvas.html

person jitain sharma    schedule 03.10.2012

person    schedule
comment
Не волнуйтесь, просто используйте кнопку изображения в разделе РАМКА и перетащите ТЕКСТ ПРОСМОТР на кнопку изображения. Готово. Если вам понравился этот пост, посетите мой сайт www.krsolutions.in и нажмите кнопку «Мне нравится» внизу сайта. - person Madhu Sudhana Reddy Kasireddy; 24.05.2013