La última palabra de Android de una línea puede provocar una dimensión de texto incorrecta si se utiliza un margen derecho

Tengo un comportamiento extraño al usar el texto intrépido en un textview.

Así que el problema es el siguiente, he creado un elemento personalizado que contiene texto y se supone que se utiliza como un elemento más adelante en una lista, por lo que el elemento se contiene varias veces en una scrollviews linearlayout, que tiene orientación vertical.

El diseño del elemento es el siguiente

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/ButtonItem"> <TextView android:id="@+id/m_oItem_TextView_TopLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="20dp" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:textColor="@color/black" android:textSize="@dimen/font_size_12" /> <TextView android:id="@+id/m_oItem_TextView_TopMiddle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/m_oItem_TextView_TopLeft" android:layout_toRightOf="@+id/m_oItem_TextView_TopLeft" android:layout_toLeftOf="@+id/m_oItem_TextView_TopRight" android:layout_marginRight="20dp" android:textColor="@color/black" android:textSize="@dimen/font_size_12" android:gravity="right"/> <TextView android:id="@+id/m_oItem_TextView_TopRight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="40dp" android:layout_alignTop="@+id/m_oItem_TextView_TopLeft" android:textColor="@color/black" android:textSize="@dimen/font_size_12"/> <TextView android:id="@+id/m_oItem_TextView_Bottom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft" android:layout_alignRight="@+id/m_oItem_TextView_TopRight" android:layout_below="@+id/m_oItem_TextView_TopLeft" android:layout_marginTop="5dp" android:textColor="@color/black" android:textSize="@dimen/font_size_14" /> <ImageView android:id="@+id/m_oItem_PlaceHolder" android:layout_width="wrap_content" android:layout_height="10dp" android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft" android:layout_alignRight="@+id/m_oItem_TextView_TopRight" android:layout_below="@+id/m_oItem_TextView_Bottom" android:contentDescription="@string/image_description"/> <ImageView android:id="@+id/m_oPart_Arrow_Image" android:scaleType="fitCenter" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:src="@drawable/arrow_right" android:contentDescription="@string/image_description"/> </RelativeLayout> 

La vista de texto m_oItem_TextView_Bottom es la parte que contendrá texto que puede ser demasiado largo para él, aumentando así la altura de la vista de texto si es necesario. Como probé esto, todo estaba funcionando correctamente y la vista de texto tenía la altura necesaria.

Sin embargo una vez

 android:textStyle="bold" 

El texto se convertirá naturalmente más ancho, así puede necesitar más líneas. El problema ahora es que esto no será contabilizado por android de alguna manera.

Por ejemplo, si la línea no negrita apenas requiere dos líneas como (último elemento en la imagen de abajo)

Último artículo con dos líneas

El texto en negrita requerirá tres líneas, pero la vista de texto seguirá proporcionando sólo dos líneas

Último artículo con tres líneas

¿Alguna vez alguien corrió en el mismo problema o tiene una solución o al menos una sugerencia de cómo podría resolver el problema. Gracias de antemano en cualquier caso

EDIT: como se solicitó el estilo ButtonItem es este

 <style name="ButtonItem"> <item name="android:background">@drawable/button_item</item> </style> 

@ Drawable / button_item siendo:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_item_down" /> <item android:state_selected="true" android:drawable="@drawable/button_item_selected" /> <item android:drawable="@drawable/button_item_normal" /> </selector> 

@ Drawable / button_item_down siendo:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle"> <solid android:color="@color/white" /> <stroke android:width="@dimen/button_item_stroke_thickness" android:color="@color/black"/> </shape> </item> </layer-list> 

@ Drawable / button_item_selected siendo:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle"> <solid android:color="@color/white" /> <stroke android:width="@dimen/button_item_stroke_thickness" android:color="@color/black"/> </shape> </item> </layer-list> 

@ Ser drawable / button_item_normal:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle" > <solid android:color="@color/transparent" /> <stroke android:width="@dimen/button_item_stroke_thickness" android:color="@color/black" /> </shape> </item> </layer-list> 

Esencialmente están allí para crear la línea negra debajo del elemento y hacer el fondo blanco si se hace clic o se selecciona. Aunque el seleccionado en nunca se utiliza ya que el estado seleccionado nunca se establece en el código de todos modos.

También lo intenté sin el estilo como el fondo, pero como era de esperar el problema sigue siendo el mismo.

EDITAR OTRA VEZ: Bueno, así que pude rastrear el problema un poco más, el cambio de tamaño de la vista de texto es en realidad correcta. El problema concreto es si sigue. Si la última palabra de una línea (por ejemplo, "esto es una prueba" mientras que la prueba es la última palabra) provoca un salto de línea, la última palabra debe ser lo suficientemente larga de alguna manera. Yo prueba esto utilizando cadenas ficticias, con el mismo elemento utilizado en la pregunta.

Aquí hay algunas fotos Introduzca aquí la descripción de la imagen

Como puede ver la línea que causa el problema necesita un carácter más, entonces la palabra es lo suficientemente larga como para encajar.

ÚLTIMO EDIT: ok encontró la respuesta (ver abajo)

Bueno, el TextView está siendo reajustado muy bien con el texto en negrita por lo que es el RelativeLayout que necesita expandirse para ajustarse a la TextView ampliada. Es posible que tengas más suerte con LinearLayouts (Una Vertical y quizás otra Horizontal para que coincida con el diseño que creaste usando el RelativeLayout) porque son buenos para volver a clasificarse cuando sus hijos cambian.

Referencia: http://logc.at/2011/10/18/when-to-use-linearlayout-vs-relativelayout/

FINALMENTE SEGUIMO EL PROBLEMA,

Así que aquí está la solución, el problema fue el margin_Right del m_oItem_TextViewBottom que fue causado por:

 android:layout_alignRight="@+id/m_oItem_TextView_TopRight" 

Por lo que efectivamente creó un derecho de margen que fue el alborotador, lo probé con otras vistas de texto y márgenes de derecha y todos tenían el mismo problema.

Lo reemplazo con un acolchado del mismo margen y terminé con esto como mi solución final para el artículo.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/ButtonItem"> <TextView android:id="@+id/m_oItem_TextView_TopLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="20dp" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:textColor="@color/black" android:textSize="@dimen/font_size_12" /> <TextView android:id="@+id/m_oItem_TextView_TopMiddle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/m_oItem_TextView_TopLeft" android:layout_toRightOf="@+id/m_oItem_TextView_TopLeft" android:layout_toLeftOf="@+id/m_oItem_TextView_TopRight" android:layout_marginRight="20dp" android:textColor="@color/black" android:textSize="@dimen/font_size_12" android:gravity="right"/> <TextView android:id="@+id/m_oItem_TextView_TopRight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingRight="40dp" android:layout_alignTop="@+id/m_oItem_TextView_TopLeft" android:textColor="@color/black" android:textSize="@dimen/font_size_12"/> <TextView android:id="@+id/m_oItem_TextView_Bottom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft" android:layout_below="@+id/m_oItem_TextView_TopLeft" android:layout_marginTop="5dp" android:paddingRight="40dp" android:textColor="@color/black" android:textStyle="bold" /> <ImageView android:id="@+id/m_oItem_PlaceHolder" android:layout_width="wrap_content" android:layout_height="10dp" android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft" android:layout_alignRight="@+id/m_oItem_TextView_TopRight" android:layout_below="@+id/m_oItem_TextView_Bottom" android:contentDescription="@string/image_description"/> <ImageView android:id="@+id/m_oPart_Arrow_Image" android:scaleType="fitCenter" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:src="@drawable/arrow_right" android:contentDescription="@string/image_description"/> </RelativeLayout> 
  • Diseño de mensajes de WhatsApp - Cómo obtener una vista de tiempo en la misma fila
  • Actualizar textview en la actividad de Fragment
  • Establecer el relleno de texto real en TextView con elementos compuestos
  • ¿Cómo habilito la copia estándar para un TextView en Android?
  • Añadir opaco "sombra" (esquema) a Android TextView
  • Cómo configurar el estilo de fuente en negrita, cursiva y subrayado en un Android TextView?
  • Android Fuente personalizada Spannable Tipo de letra
  • Cómo quitar el guión del primer carácter en la vista de texto de Android
  • EditText Alternativas en un Widget? Tiene que haber una forma
  • Cómo hacer que mi ancho de TextView mitad de su padre?
  • ¿Cómo crear una animación cambiante de color? (Androide)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.