2011-04-06 21 views
53

Quiero insertar algunas imágenes en TextView. ¿Cómo hacerlo? Cualquier idea¿Cómo mostrar la imagen en TextView de Android?

+0

utilizando dos primeras respuestas, que no son capaces de añadir imágenes entre el texto, solamente en la parte superior, inferior, izquierda o derecha, pero mi solución le permite añadir la imagen a lo índice que desea en el texto –

+2

Ver este artículo sobre cómo [configurar conjuntos arrastrables compuestos a un TextView] (http://mgmblog.com/2010/06/04/setcompounddrawable-to-add-drawables-to-textview/) – Salil

+0

Respuesta actualizada por 'Dawid', bastante compacto. – Darpan

Respuesta

67

Puede crear un SpannableString y colocar su imagen donde desee en TextView. O puede utilizar

ImageSpan is = new ImageSpan(context, resId); 
text.setSpan(is, index, index + strLength, 0); 
+0

¿no terminará esto en una excepción de índice fuera de límites porque el tercer parámetro, que es int end, está más allá de la longitud de la cadena? –

+4

@LeiLeyba correcto. la respuesta real sería: final Spannable text = new SpannableString (string + ""); text.setSpan (es, string.length(), 1 + string.length(), 0); . esto agregará una imagen al final de la cadena dada. –

+0

Si desea colocar una imagen envuelta con texto, tenga en cuenta que no se muestra si abarca un carácter de "espacio" y la vista de texto inserta un salto de línea en esa posición. Supongo que la vista de texto corta todos los espacios en este caso, lo que hace que la imagen no se muestre en esa posición. Utilice un carácter ficticio como "x" que no está recortado por la vista de texto en su lugar. – Kedu

9

haga algo como esto.

textView.setCompoundDrawableWithIntrinsicBounds(yourImg, null, null, null); 
23
ImageSpan is = new ImageSpan(context, R.drawable.arrow); 
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet"); 
text.setSpan(is, 5, 5 + 10, 0); 
+0

Esta es la solución más limpia (y la única que funciona para mí) . – Bevor

1

maquillaje custom.xml

 <RelativeLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <ImageView 
       android:id="@+id/thumbnail_view" 
       android:src="@drawable/ic_launcher" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

    <TextView android:id="@+id/message_view" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_toRightOf="@id/thumbnail_view" 
       android:textSize="18sp" 
       android:text="MyText" /> 
     </RelativeLayout> 

después en main.xml, incluya esta custom.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_horizontal"> 

    <include 
     android:id="@+id/customView" 
     layout="@layout/custom"/> 

      </LinearLayout> 

Ésta es mi mainActivity.class

package com.example.test; 


import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
    import android.widget.TextView; 


    public class MainActivity extends Activity implements OnClickListener { 

    private String TAG = MainActivity.class.getSimpleName(); 
    ImageView img; 
    ImageView img1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TextView txt = (TextView)findViewById(R.id.message_view); 
    img = (ImageView) findViewById(R.id.thumbnail_view); 
    img1 = (ImageView) findViewById(R.id.thumbnail_view1); 

    img.setOnClickListener(this); 
    img1.setOnClickListener(this); 

} 
@Override 
public void onClick(View v) { 
    if(v== img){ 
     // do something for img 
    } 
    else if (v== img1){ 
     //do something for img1 
    } 

} 
} 
50

Mucho más fácil se puede utilizar SpannableStringBuilder de API 1

Ejemplo de uso:

Para API> = 21

SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append("My string. I ") 
      .append(" ", new ImageSpan(getActivity(), R.drawable.ic_action_heart), 0) 
      .append(" Cree by Dexode"); 

    textView.setText(builder); 

Para API> = 1

SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append("My string. I ").append(" "); 
    builder.setSpan(new ImageSpan(getActivity(), R.drawable.ic_action_heart), 
      builder.length() - 1, builder.length(), 0); 
    builder.append(" Cree by Dexode"); 

    textView.setText(builder); 
+1

¡Muy buena solución! Gracias ! –

+0

Perfecto. ¡Gracias! – Umair

+0

Oye, ¿es posible de todos modos agregar un texto de edición dentro de la vista de texto ya que hemos agregado la imagen dentro de la vista de texto como se muestra arriba? – Anu

-1

Prueba este ...

<string name="home"><img src=""></img></string> 

<TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/home" /> 
+0

no funciona en absoluto – prateek31

+0

¿cómo se supone que funciona? –