Tengo una horizontal que LinearLayout
contiene una TextView
seguida de una Spinner
junto a ella. Esto LinearLayout
se infla dinámicamente varias veces en una vertical fija LinearLayout
contenida dentro de a RelativeLayout
.
El problema es que desde que cambié de Theme.light
a Theme.holo.light
, la última línea TextView
se corta a la mitad. Esto sucede cuando el texto dinámico es largo y ocupa más de una fila.
He podido solucionar esto agregando relleno inferior al horizontal que LinearLayout
contiene TextView
y Spinner
.
Esto no se siente como una solución, sino más como un truco. ¿Alguien puede darme algún consejo sobre cómo solucionar esto correctamente?
También he leído algunas otras preguntas, pero ninguna parece ayudar.
Diseño lineal horizontal:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:text="TextView"/>
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Diseño relativo donde el diseño anterior se infla dinámicamente en el diseño lineal con id ll2_7:
<?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="match_parent" >
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
EDITAR: Aquí está el xml de diseño completo para arriba:
<?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="match_parent" >
<TextView
android:id="@+id/textView1"
style="@style/question_section_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/question2_header" />
<RelativeLayout
android:id="@+id/relLayoutButtonNext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/bottomBar"
android:paddingBottom="3dp"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:paddingTop="3dp" >
<Button
android:id="@+id/buttonNext"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:onClick="nextStep"
android:text="Next Section"
android:textSize="20sp" />
<Button
android:id="@+id/buttonPrevious"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="previousStep"
android:text="Previous Section"
android:textSize="20sp" />
</RelativeLayout>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView10"
android:layout_below="@+id/ll2_7"
android:text="2.8" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_7"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_8" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:layout_marginBottom="20dp"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/ll2_8"
android:text="2.9" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_8"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_9" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView5"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView4"
android:layout_below="@+id/ll2_9"
android:text="2.10" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_9"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_10" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView7"
android:layout_marginBottom="20dp"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView6"
android:layout_below="@+id/ll2_10"
android:text="2.11" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_10"
android:layout_toRightOf="@+id/textView10"
android:text="@string/quesiton2_11" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView9"
android:layout_below="@+id/textView9"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView8"
android:layout_below="@+id/ll2_11"
android:text="2.11.1" />
<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_11"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_11_1" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView13"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
fuente
Respuestas:
Encontré el mismo problema de corte que se muestra en la captura de pantalla. Es causado por la alineación de la línea de base en la horizontal
LinearLayout
.TextView
ySpinner
tienen diferentes líneas de base debido a la diferencia de tamaño de fuente. Para solucionar el problema, es necesario deshabilitar la alineación de la línea de base para el diseño configurando:o en el código:
fuente
Después de probar un millón de cosas diferentes, creo que tengo la respuesta.
LayoutGravity
Apliqué un al elemento TextView:Parece resolver todos los problemas de recorte que tuve. Espero que esto ayude a alguien con el mismo problema.
fuente
@android:style/Widget.TextView
y agrego las siguientes líneas:<item name="android:gravity">fill</item>
<item name="android:padding">1sp</item>
android:baselineAligned="false"
a suLinearLayout
Tuve el mismo problema y descubrí que simplemente agregando
la última línea de texto ya no tenía sus descendientes recortados.
fuente
Agregué un espacio ficticio después del texto agregando
Probé todas las demás soluciones, pero esta fue la única solución que funcionó para mí.
fuente
Coloque la vista de texto problemática dentro de un diseño de marco. Creo que la vista de texto no se calcula correctamente debido a la vista de hermanos, Spinner.
fuente
CheckBox
en el mismoLinearLayout
. Esto resolvió el problema.Cuando esto ocurra, debe asegurarse de que
TextView
no esté creciendo más grande que su contenedor -Si a
TextView
se establece enwrap_content
y su contenedor (o un contenedor ancestro) no deja espacio paraTextView
que crezca, se puede ocluir.Si ese no es el caso, también es posible la
onMeasure()
de laTextView
veces no mide correctamente las colas de letras, caracteres no latinos o los efectos de texto que se está en cursiva. Puede corregir esto configurando un estilo global para usted,TextView
por lo que se seleccionará sin necesidad de cambiar toda su base de código:Asegúrese de que su aplicación / actividades use un tema personalizado como este:
La respuesta de @Rynadt fue realmente útil para llegar a la etapa anterior. Establecer la gravedad del texto dentro de la vista asegura en algunos dispositivos que la oclusión nunca se produce (el texto se ajusta correctamente dentro de la vista), en otros, una mano amiga con el relleno de un valor sp, asegura que las colas y otros se tengan en cuenta con un valor específico de TextSize.
fuente
Mi solución estaba cerca de la aceptada, pero tuve que cambiarla a
en lugar. De lo contrario, las otras filas también se habrían estirado con saltos de línea agregados en lugares aleatorios. Por ejemplo, la fila más grande tenía 4 líneas, por lo que se cambió otra fila de
this is a testphrase
a
fuente
Encontré una solución diferente extendiendo TextView y agregando una clase personalizada como esta:
fuente
this.setEllipsize(TextUtils.TruncateAt.END);
la declaración if anterior y elimineandroid:ellipsize="end"
del XML que por alguna razón lo rompe.intente eliminar android: paddingBottom = "20dp"
de
fuente
getViewTreeObserver().addOnGlobalLayoutListener
no funciona en una vista de reciclador. Si está usando un reciclador, useView.addOnLayoutChangeListener
:Descubrí que la elipsización que definí
textView
en xml no siempre se reflejaba, así que la configuré programáticamente antes de reasignar la propiedad de texto. Esto funcionó para mí.fuente
Si tiene este problema y se
TextView
encuentra dentro de aRelativeLayout
, intente cambiar elRelativeLayout
por aLinearLayout
.Eso me solucionó el problema
fuente
Puede utilizar un detector de diseño global para TextView en cualquier tipo de ViewGroup.
Puedes leer más sobre esto aquí.
fuente
Creo que es muy poco lo que puede hacer para que esto funcione modificando los diseños. Como he descubierto, algunos métodos funcionan solo en algunos casos. Creo que depende de toda la jerarquía de diseño y no es una solución única para todos. También he notado que sucede especialmente cuando tiene una fuente diferente que desea establecer en TextView.
Un método de disparo seguro que he experimentado y probado es que puede establecer los atributos de fuente en el código después de inflar la vista. Supongo que tiene una fuente en la carpeta de activos / fuentes que desea para usted.
Por ejemplo, en un fragmento:
Y en una actividad:
fuente
Tengo el mismo problema y es muy molesto.
Solo ocurre con el texto árabe.
Si hace la etiqueta de varias líneas y agrega un
\n
al final de su cadena, lo solucionaría, pero el problema es que habría un gran espacio entre esta etiqueta y el objeto debajo de ella, debido al hecho de que este campo ahora tiene una nueva línea vacía debajo.Se puede hacer un control personalizado para evitar eso. Pero en general, este es un error molesto.
fuente
La mejor solución para esto es agregar una vista ficticia de la altura deseada (es decir, esto agregará relleno) en la parte inferior de la vista.
Como en mi caso, agregué una fila de tabla más en la parte inferior de la vista. Espero que esto pueda ayudar a alguien.
fuente
Sé que es muy tarde, pero esto es un trabajo maravilloso para mí. agregue este código a su
textview
fuente
Agregue relleno en la parte inferior de la vista de texto:
fuente
¡Finalmente lo arreglé!
Intento agregar String a TextView en Service y luego llamo scrollTo (), ¡la última línea se cortará!
El scrollTo () debe llamarse en "Ejecutable", como:
Lo creo porque en el dinero de la llamada scrollTo () en servicio, la actualización de TextView no está lista.
fuente