2010-08-21 13 views
38

Se AbsoluteLayout è deprecato, cosa posso usare al posto di esso?Alternativa a AbsoluteLayout in Android?

Ho fatto un'app che utilizza AbsoluteLayout ma non funziona bene con le diverse risoluzioni dello schermo. Io uso perché posso impostare la posizione X e Y di un pulsante. Posso impostare la posizione di un pulsante usando un altro layout?

+3

Sarai servito meglio a descrivere ciò che stai cercando di ottenere. Parte della ragione per cui "AbsoluteLayout" è deprecato è perché non supporta bene più dimensioni dello schermo. Qualsiasi corollario diretto a 'AbsoluteLayout' (ad es.' FrameLayout' con margini) avrà lo stesso problema. Dovresti iniziare cercando altre soluzioni per il tuo problema, quelle che funzioneranno meglio con una vasta gamma di dispositivi. – CommonsWare

+0

Grazie. Ho aggiunto alcune informazioni ora. – JoeyCK

+0

Ho appena pubblicato una libreria che sarebbe stata di interesse per l'OP: https://github.com/ManuelPeinado/ImageLayout – Manuel

risposta

20

è possibile utilizzare RelativeLayouts come descritto qui: Set the absolute position of a view

+2

Il grosso problema con RelativeLayout è che se si annidano, il numero di chiamate a OnMeasure raddoppia a ogni passo. Quindi se hai bisogno di una gerarchia profonda, questa non è una buona risposta. –

+0

@WilliamJockusch L'ho scoperto a mio modo. La soluzione (meglio sofar) è usare LinearLayout ogni volta che è possibile (e di solito lo è), e annidare RelativeLayout all'interno di LinearLayouts. Avevo una vista tabella che ho realizzato con il relativo layout con RelativeLayouts nidificati - cambiando solo la vista dall'alto su LinearLayout, ho ottenuto un tempo di esecuzione normale. Vorrei ipotizzare che tu possa hackerare un "AbsoluteLayout" creando un LinearLayout con RelativeLayout al suo interno, ma il suono di ciò è terribile. – user1122069

0

vorrei solo usare un layout relativo e impostarlo in base al largo delle altre voci/bordi dello schermo. In caso contrario, il layout appare diverso su diversi dispositivi.

+0

Sto facendo un grafico in cui devo mettere le visualizzazioni di testo in posizioni EXACT su un'immagine STATIC. Penso che l'unico modo sarebbe (in effetti se non tecnicamente) un layout assoluto. Poi potrei fare quelli per vari secchi, ma siccome mi aspetto un dolore nel culo con esso. –

10

Usa RelativeLayout e set margini destro come

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
lp.leftMargin = x; 
lp.topMargin = y; 
5

sinistra e Considerare l'utilizzo FrameLayout. Se si imposta la gravità del figlio su TOP|LEFT, è possibile utilizzare leftMargin e topMargin come posizioni. Come bonus ottieni qualche altro meccanismo di posizionamento utile cambiando la gravità.

1

Vi suggerisco ragazzi se volete avere il pieno controllo sulle posizioni dei vostri punti di vista sullo schermo solo per estendere ViewGroup e realizzare la vostra implementazione di AbsoluteLayout. La soluzione più semplice sarà utilizzare uno dei layout esistenti e giocare con margini, paddings, gravità e così via, ma il controllo non sarà così potente e può costare qualche problema sugli schermi dei dispositivi diff.