2011-11-21 3 views
5

Ho un RealtiveLayout creato in un file XML regolato per una vista 480x320 (verticale). Tutto è creato in unità "dip". Fondamentalmente contiene 4 visualizzazioni di testo che utilizzano un quarto dello schermo ciascuna. Sono tutti posizionati da layout_marginLeft e layout_marginTop. L'app dispone di una funzionalità che consente di toccare una di queste 4 visualizzazioni di testo per ingrandirla, mentre le altre 3 diminuiscono di dimensioni e si allineano l'una sull'altra a sinistra della vista. Tocca di nuovo la lettura grande e tutti e 4 torneranno alla loro dimensione iniziale.Il testo nella vista testo scorre in Android 3.0

Questo

tutto funziona benissimo su dispositivi diversi e nell'emulatore - ma non se l'emulatore corre Android 3.0 o superiore ...

Prima di tutto l'applicazione non è scalabile, così ho fatto un po 'di codice che calcola le dimensioni della dimensione del testo e la dimensione del carattere rispetto alle dimensioni dello schermo. Tutto funziona magnificamente, ma in Android 3.0 cose divertenti accadono una volta che il testo viene ridimensionato. Improvvisamente sembra che ci sia una riga vuota inserita prima del testo effettivamente, il che significa che vedo solo la parte superiore del testo che voglio visualizzare.

Ecco come viene definita la visualizzazione del testo. C'è un pulsante trasparente in cima a ogni lettura.

<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"/> 

Ho provato cose diverse per assicurarsi che solo una riga di testo, ho impostato la gravità per alto a sinistra (anche se questo non è quello che voglio è), ma la stessa cosa continuano a succedere.

posso cambiare la dimensione e il carattere del TextView e le dimensioni del pulsante da questo codice:

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); 

La cosa "buffa" è che io chiamo la mia routine di ridimensionamento inizialmente, e tutto sembra a posto, una volta che ho fatto una lettura grande e poi tornare di nuovo alla dimensione standard (con gli stessi valori usati per la visualizzazione iniziale, il testo della textview che era grande si è spostato in basso di una riga all'interno della textview.

Qualcuno ha un indizio su cosa sta succedendo?

INFORMAZIONI SUPPLEMENTARI Ho provato ad aggiungere un getLineBounds e mostra che la linea di base del textView aumenta man mano che textSize aumenta, ma non diminuisce quando il valore textSize diminuisce. Non importa se ho la gravità in alto, al centro o in basso.

+0

Ho lo stesso problema. My TextView aveva un'immagine di sfondo. Le TextView sono in una tabella in un layout relativo. Ho rimosso l'immagine e il problema sembra essere andato via, ma non posso ancora essere sicuro. Tutto stava funzionando bene per diverse settimane, poi il problema apparve all'improvviso dopo un cambiamento minore e non correlato a un'altra parte del layout (ho cambiato l'elemento in alto da un pulsante, a un ImageView). –

risposta

0

Basta provare questo:

impostare il minWidth del TextView dire 5dp e il layout_width a wrap_content. Ciò significherebbe che ogni TextView occuperebbe necessariamente 5dp. Inoltre, non è necessario aggiungere la gravità dal momento che si dà il MinWidth. E, non impostare la larghezza e l'altezza di TextView su un valore statico. Prova qualcosa del tipo:

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