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


Cómo alinear TextView alrededor de un ImageView?

Introduzca aquí la descripción de la imagen

Estoy intentando alinear el TextView alrededor de ImageView. Estoy usando el siguiente código:

  • Android RelativeLayout alinea el centro de una vista en la esquina superior derecha de otra vista
  • Android "layout_alignParentBottom" en el diseño relativo
  • Cómo alinear a la derecha el texto en un Android TextView o EditText?
  • ¿Cómo alinear a la derecha el widget en la disposición horizontal horizontal?
  • Horizontalmente las vistas de centro dentro de Android GridLayout
  • ¿Cómo Funciona OpenCV ORB Feature Detector?
  • private void createSpannableText(){ TextView myTextView = (TextView) findViewById(R.id.textView); SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(this.getText(R.string.loren__ipsum__max)); int lengthOfPart1 = builder.length(); builder.append(" "); builder.append(this.getText(R.string.lorem__ipsum)); Drawable d = getResources().getDrawable(R.drawable.myImage); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear ImageSpan myImage = new ImageSpan(d); builder.setSpan(myImage, 0, lengthOfPart1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); myTextView.setText(builder); } 

    Pero no pudo obtener el resultado exacto. ¿Qué debo hacer? ¿Necesito utilizar SpannableStringBuilder en este caso o hay otra manera. Por favor ayuda. Utilicé este post-para obtener la solución.

    PS: También quiero un margen de 6dp alrededor del ImageView

  • ORM en Android SQLite y esquema de base de datos
  • Lógica de la parada
  • Usar el diálogo PIN del sistema en la aplicación de Android
  • Android Toast iniciado desde el servicio sólo se muestra una vez
  • No pudo encontrar el error * .apk
  • No se puede llamar a getBootClasspath () antes de que setTargetInfo () se llame
  • One Solution collect form web for “Cómo alinear TextView alrededor de un ImageView?”

    Puede lograr esto usando la interfaz android.text.style.LeadingMarginSpan.LeadingMarginSpan2 que está disponible en API 8. Este es el artículo , no en inglés sin embargo, traducirlo usando su navegador. Además puedes descargar el código fuente del ejemplo directamente desde aquí .

    Su diseño:

     <?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp"> <TextView android:textSize="18.0sp" android:id="@+id/message_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/text" /> <ImageView android:src="@drawable/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/icon" /> </RelativeLayout> 

    La clase de LeadingMarginSpan.LeadingMarginSpan2 implementa LeadingMarginSpan.LeadingMarginSpan2

     class MyLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 { private int margin; private int lines; MyLeadingMarginSpan2(int lines, int margin) { this.margin = margin; this.lines = lines; } /* Возвращает значение, на которе должен быть добавлен отступ */ @Override public int getLeadingMargin(boolean first) { if (first) { /* * Данный отступ будет применен к количеству строк * возвращаемых getLeadingMarginLineCount() */ return margin; } else { // Отступ для всех остальных строк return 0; } } @Override public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {} /* * Возвращает количество строк, к которым должен быть * применен отступ возвращаемый методом getLeadingMargin(true) * Замечание: * Отступ применяется только к N строкам первого параграфа. */ @Override public int getLeadingMarginLineCount() { return lines; } }; 

    Su código de actividad:

      @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String text = getString(R.string.text); // Получаем иконку и ее ширину Drawable dIcon = getResources().getDrawable(R.drawable.icon); int leftMargin = dIcon.getIntrinsicWidth() + 10; // Устанавливаем иконку в R.id.icon ImageView icon = (ImageView) findViewById(R.id.icon); icon.setBackgroundDrawable(dIcon); SpannableString ss = new SpannableString(text); // Выставляем отступ для первых трех строк абазца ss.setSpan(new MyLeadingMarginSpan2(3, leftMargin), 0, ss.length(), 0); TextView messageView = (TextView) findViewById(R.id.message_view); messageView.setText(ss); } 

    Y finalmente aquí un resultado de demostración:

    Introduzca aquí la descripción de la imagen

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