2011-11-21 32 views
5

Tengo un RealtiveLayout creado en un archivo XML ajustado para una vista de 480x320 (vertical). Todo se crea en unidades de "inmersión". Básicamente tiene 4 textviews que usan un cuarto de la pantalla cada una. Todos están posicionados por layout_marginLeft y layout_marginTop. La aplicación tiene una función que puede tocar en cualquiera de estas 4 textviews para hacerla grande, y las otras 3 disminuirán en tamaño y se alinearán una sobre la otra a la izquierda de la vista. Toque la lectura grande de nuevo y los 4 volverán a su tamaño inicial.El texto en la vista de texto se desliza hacia abajo en Android 3.0

Este

todo trabaja muy bien en diferentes dispositivos y en el emulador - pero no si el emulador funciona con Android 3.0 o superior ...

En primer lugar la aplicación no escala, así que hice un poco de código que calcula los tamaños y el tamaño de la fuente de texto en relación con el tamaño de la pantalla. Todo esto funciona muy bien, pero en Android 3.0 ocurre algo divertido una vez que el texto cambia de tamaño. De repente, parece que hay una línea en blanco insertada antes del texto en realidad, lo que significa que solo veo la parte superior del texto que quiero mostrar.

Así es como se define la vista de texto. Hay un botón transparente encima de cada lectura.

<TextView android:id="@+id/out1" 
android:textStyle="bold" 
android:typeface="serif" 
android:text="@string/Out1_text" 
android:layout_height="80dip" 
android:layout_width="161dip" 
android:layout_marginLeft="54dip" 
android:layout_marginTop="57dip" 
android:scrollHorizontally="true" 
android:gravity="left|top" 
android:maxLines="1" 
android:background="#7f7f7f" 
android:textColor="@android:color/white"/> 
<ImageButton android:id="@+id/BigButton1" 
android:background="@drawable/transparent" 
android:layout_marginLeft="54dp" 
android:layout_marginTop="57dp" 
android:layout_width="161dp" 
android:layout_height="80dp"/> 

He intentado cosas diferentes para asegurarse de que es sólo una línea de texto, me he fijado la gravedad a la parte superior izquierda (a pesar de que no es lo que quiero), pero lo mismo que siguen ocurriendo.

puedo cambiar el tamaño y la fuente de la Vista de Texto y el tamaño del botón por este código:

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(NewOut1Width, NewOut1Height); 
params1.setMargins(NewOut1X, NewOut1Y, 0, 0); 
big1Button.setLayoutParams(params1); 
out1_txtView.setLayoutParams(params1); 
out1_txtView.setTextSize(NewOut1FontSize); 

Lo "gracioso" es que llamo a mi rutina de cambio de tamaño en un principio, y todo se ve bien, una vez que tengo hizo una lectura grande y luego volvió al tamaño estándar otra vez (con los mismos valores utilizados para la visualización inicial, el texto de la vista de texto que era grande se movió hacia abajo una línea dentro de la vista de texto)

¿Alguien tiene una pista sobre ¿Qué está pasando?

INFORMACIÓN ADICIONAL He intentado agregar un getLineBounds, y muestra que la línea de base del textView aumenta a medida que el tamaño del texto aumenta, pero no vuelve a bajar cuando el tamaño del texto disminuye. No importa si tengo la parte superior, central o inferior de gravedad.

+0

Tengo el mismo problema. Mi TextView tenía una imagen de fondo. Los TextViews están en una tabla en un diseño relativo. He eliminado la imagen y parece que el problema desapareció, pero todavía no estoy seguro. Todo estaba funcionando bien durante varias semanas, luego el problema apareció de repente después de un cambio menor, no relacionado a otra parte del diseño (cambié el elemento en la parte superior de un botón a un ImageView). –

Respuesta

0

Intenta esto:

establecer el minWidth del TextView decir 5 dp y el layout_width a wrap_content. Esto significa que cada textView ocuparía necesariamente 5dp. Además, no necesita agregar la gravedad ya que le da el minWidth. Y no establezca el ancho y alto de textView en un valor estático. Pruebe algo como:

RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(width, height); 
textView.setLayoutParams(relativeLayoutParams); 
Cuestiones relacionadas