Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo agregar la imagen en un texto de TextView?

He buscado alrededor de Google y se encontró con este sitio donde encontré una pregunta similar a la mía en la que la forma de incluir una imagen en un texto TextView , por ejemplo "hola mi nombre es [imagen]" , y la respuesta fue la siguiente:

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

Me gustaría saber en este código,

  1. ¿Qué se supone que debo escribir o hacer en el contexto?
  2. ¿Se supone que debo hacer algo al text.setSpan() como importar o referenciar o dejarlo texto?

Si alguien puede romper esto para mí que sería muy apreciado.

  • No se puede hacer referencia al tema Holo desde valores-v11 / themes.xml
  • Con SAX Parser, obtiene el valor de un atributo
  • Temas de Android: Defina colores / degradados en "baseTheme.xml", use dentro de controles, reemplace en "subThemeX.xml"
  • Inicializar las preferencias de XML en la actividad principal
  • Cambiar el color de la barra de navegación, Android
  • Android - Cambiar el tema de la aplicación en onClick
  • La vinculación de datos de Android pasa los argumentos al método onClick
  • Agregar varias vistas personalizadas al diseño mediante programación
  • 4 Solutions collect form web for “¿Cómo agregar la imagen en un texto de TextView?”

    Prueba esto ..

      txtview.setCompoundDrawablesWithIntrinsicBounds( R.drawable.image, 0, 0, 0); 

    También vea esto .. http://developer.android.com/reference/android/widget/TextView.html

    Pruebe esto en el archivo xml

      <TextView android:id="@+id/txtStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:drawableLeft="@drawable/image" android:drawablePadding="5dp" android:singleLine="true" android:text="@string/name"/> 

    Com / xyz / customandroid / TextViewWithImages .java :

     import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.Context; import android.text.Spannable; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.util.Log; import android.widget.TextView; public class TextViewWithImages extends TextView { public TextViewWithImages(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public TextViewWithImages(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewWithImages(Context context) { super(context); } @Override public void setText(CharSequence text, BufferType type) { Spannable s = getTextWithImages(getContext(), text); super.setText(s, BufferType.SPANNABLE); } private static final Spannable.Factory spannableFactory = Spannable.Factory.getInstance(); private static boolean addImages(Context context, Spannable spannable) { Pattern refImg = Pattern.compile("\\Q[img src=\\E([a-zA-Z0-9_]+?)\\Q/]\\E"); boolean hasChanges = false; Matcher matcher = refImg.matcher(spannable); while (matcher.find()) { boolean set = true; for (ImageSpan span : spannable.getSpans(matcher.start(), matcher.end(), ImageSpan.class)) { if (spannable.getSpanStart(span) >= matcher.start() && spannable.getSpanEnd(span) <= matcher.end() ) { spannable.removeSpan(span); } else { set = false; break; } } String resname = spannable.subSequence(matcher.start(1), matcher.end(1)).toString().trim(); int id = context.getResources().getIdentifier(resname, "drawable", context.getPackageName()); if (set) { hasChanges = true; spannable.setSpan( new ImageSpan(context, id), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); } } return hasChanges; } private static Spannable getTextWithImages(Context context, CharSequence text) { Spannable spannable = spannableFactory.newSpannable(text); addImages(context, spannable); return spannable; } } 

    Utilizar:

    En res / layout / mylayout.xml :

      <com.xyz.customandroid.TextViewWithImages android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF00" android:text="@string/can_try_again" android:textSize="12dip" style=... /> 

    Tenga en cuenta que si coloca TextViewWithImages.java en alguna ubicación que no sea com / xyz / customandroid / , también debe cambiar el nombre del paquete, com.xyz.customandroid .

    En res / values ​​/ strings.xml :

     <string name="can_try_again">Press [img src=ok16/] to accept or [img src=retry16/] to retry</string> 

    Donde ok16.png y retry16.png son iconos en la carpeta res / drawable /

    Esta respuesta se basa en esta excelente respuesta de 18446744073709551615 . Su solución, aunque útil, no dimensiona el icono de la imagen con el texto que lo rodea. También no establece el color del icono en el texto que lo rodea.

    La solución siguiente toma un icono blanco, cuadrado y lo hace encajar el tamaño y el color del texto circundante.

     public class TextViewWithImages extends TextView { private static final String DRAWABLE = "drawable"; /** * Regex pattern that looks for embedded images of the format: [img src=imageName/] */ public static final String PATTERN = "\\Q[img src=\\E([a-zA-Z0-9_]+?)\\Q/]\\E"; public TextViewWithImages(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public TextViewWithImages(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewWithImages(Context context) { super(context); } @Override public void setText(CharSequence text, BufferType type) { final Spannable spannable = getTextWithImages(getContext(), text, getLineHeight(), getCurrentTextColor()); super.setText(spannable, BufferType.SPANNABLE); } private static Spannable getTextWithImages(Context context, CharSequence text, int lineHeight, int colour) { final Spannable spannable = Spannable.Factory.getInstance().newSpannable(text); addImages(context, spannable, lineHeight, colour); return spannable; } private static boolean addImages(Context context, Spannable spannable, int lineHeight, int colour) { final Pattern refImg = Pattern.compile(PATTERN); boolean hasChanges = false; final Matcher matcher = refImg.matcher(spannable); while (matcher.find()) { boolean set = true; for (ImageSpan span : spannable.getSpans(matcher.start(), matcher.end(), ImageSpan.class)) { if (spannable.getSpanStart(span) >= matcher.start() && spannable.getSpanEnd(span) <= matcher.end()) { spannable.removeSpan(span); } else { set = false; break; } } final String resName = spannable.subSequence(matcher.start(1), matcher.end(1)).toString().trim(); final int id = context.getResources().getIdentifier(resName, DRAWABLE, context.getPackageName()); if (set) { hasChanges = true; spannable.setSpan(makeImageSpan(context, id, lineHeight, colour), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); } } return hasChanges; } /** * Create an ImageSpan for the given icon drawable. This also sets the image size and colour. * Works best with a white, square icon because of the colouring and resizing. * * @param context The Android Context. * @param drawableResId A drawable resource Id. * @param size The desired size (ie width and height) of the image icon in pixels. * Use the lineHeight of the TextView to make the image inline with the * surrounding text. * @param colour The colour (careful: NOT a resource Id) to apply to the image. * @return An ImageSpan, aligned with the bottom of the text. */ private static ImageSpan makeImageSpan(Context context, int drawableResId, int size, int colour) { final Drawable drawable = context.getResources().getDrawable(drawableResId); drawable.mutate(); drawable.setColorFilter(colour, PorterDuff.Mode.MULTIPLY); drawable.setBounds(0, 0, size, size); return new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); } } 

    Cómo utilizar:

    Basta con insertar referencias a los iconos deseados en el texto. No importa si el texto se establece de forma programática a través de textView.setText(R.string.string_resource); O si está configurado en xml.

    Para incrustar un icono dibujable denominado example.png, incluya la siguiente cadena en el texto: [img src=example/] .

    Por ejemplo, un recurso de cadena podría tener este aspecto:

     <string name="string_resource">This [img src=example/] is an icon.</string> 

    He probado muchas soluciones diferentes y esto para mí fue el mejor:

     SpannableStringBuilder ssb = new SpannableStringBuilder(" Hello world!"); ssb.setSpan(new ImageSpan(context, R.drawable.image), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); tv_text.setText(ssb, TextView.BufferType.SPANNABLE); 

    Este código utiliza un mínimo de memoria.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.