Come posso ottenere larghezza e altezza di un layout lineare definito in xml come fill_parent sia in altezza che in larghezza? Ho provato il metodo onmeasure ma non so perché non sta dando un valore esatto. Ho bisogno di questi valori in un'attività prima della conclusione del metodo oncreate.get altezza e larghezza del layout in fase di esecuzione android
risposta
Supponiamo che io sono per ottenere una larghezza LinearLayout
definito in XML. Devo avere riferimenti su XML. Definire LinearLayout
l
come esempio.
l = (LinearLayout)findviewbyid(R.id.l1);
ViewTreeObserver observer = l.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
init();
l.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
}
});
protected void init() {
int a= l.getHeight();
int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,3000).show();
}
callfragment();
}
Sii consapevole! Non ti darà valori prima che onCreate finisca. Ho pensato di averlo chiamato all'interno del metodo onCreate, il suo metodo di override verrà chiamato in ritardo. Quindi potrebbe sembrare che la tua applicazione vada lentamente, ma risolve il mio scopo. – MGDroid
I valori di larghezza e altezza vengono impostati dopo che il layout è stato creato, quando gli elementi sono stati posizionati vengono poi misurati. Alla prima chiamata a onSizeChanged i parms saranno 0 quindi se si usa quel controllo per questo.
Poco più in dettaglio qui https://groups.google.com/forum/?fromgroups=#!topic/android-developers/nNEp6xBnPiw
e qui http://developer.android.com/reference/android/view/View.html#Layout
Ecco come utilizzare onLayout:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int width = someView.getWidth();
int height = someView.getHeight();
}
Si potrebbe aggiungere il layout di cambiamento ascoltatore al layout e ottenere il più recente altezza e la larghezza o anche quello prima ultima modifica.
aggiunte a livello API 11
Aggiungere un ascoltatore che verrà chiamata quando i limiti della variazione vista causa dell'elaborazione layout.
LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);
myLinearLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
// Preventing extra work because method will be called many times.
if(height == (bottom - top))
return;
height = (bottom - top);
// do something here...
}
});
Per farlo funzionare, è necessario controllare se il valore altezza desiderata è più grande di 0 - e prima quindi rimuovere l'ascoltatore onGlobalLayout e fare quello che vuoi con l'altezza. L'ascoltatore chiama il suo metodo continuamente e dalla prima chiamata non è garantito che la vista sia misurata correttamente.
final LinearLayout parent = (LinearLayout) findViewById(R.id.parentView);
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int availableHeight = parent.getMeasuredHeight();
if(availableHeight>0) {
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//save height here and do whatever you want with it
}
}
});
Questo ha fatto il trucco - grazie. La chiamata rimuovi listener è obsoleta dal livello 16 dell'API. In questo post viene descritto come supportare la chiamata per le API precedenti e successive http://stackoverflow.com/a/23741481/2162226 – gnB
- 1. Come ottenere la larghezza/altezza di un layout in Android
- 2. modifica altezza e larghezza dell'immagine in Android
- 3. Android: larghezza del layout programmaticamente con fill_parent nel suo xml
- 4. layout lineare Altezza e peso
- 5. Totalmente stufo con get Gtk widget altezza e larghezza
- 6. Ottieni larghezza e altezza di una riga in RecycleView - Android
- 7. Impostazione larghezza e altezza
- 8. Come ottenere larghezza e altezza grezza del dispositivo o larghezza e altezza effettive dello schermo?
- 9. Layout larghezza percentuale Android
- 10. Specificare larghezza e altezza del grafico
- 11. MKPinAnnotationView: larghezza e altezza del pin
- 12. Cambia altezza e larghezza del font
- 13. Pulsante Android fa 1/3 di larghezza e altezza dello schermo nel relativo layout
- 14. cambiamento e applicare tema in fase di esecuzione in Android
- 15. Android: altezza del layout in percentuale della risoluzione dello schermo
- 16. Come ottenere NUOVA larghezza/altezza del layout di root in onConfigurationChanged?
- 17. Android layout Parametri modificare solo la larghezza e l'altezza
- 18. Come rimuovere altezza e larghezza?
- 19. Come ottenere larghezza e altezza dell'immagine visualizzata in Android?
- 20. Ridimensiona/ridimensiona come pulsante (altezza e larghezza)
- 21. Ottieni larghezza e altezza dei componenti in Vista frammento
- 22. Dimensioni e altezza del display errate in Android
- 23. Larghezza e altezza personalizzate in DOMPDF
- 24. Come ottenere iOS altezza dello schermo del dispositivo e larghezza
- 25. Layout di larghezza minore di Android
- 26. Android - Altezza del layout del fotogramma non corrispondente al layout del coordinatore
- 27. Altezza e larghezza totali SVG
- 28. Esecuzione del codice java compilato in fase di esecuzione
- 29. Imposta larghezza e altezza del contenitore di Google Maps 100%
- 30. Larghezza di carosello di bootstrap e altezza
IIRC non è possibile ottenere l'altezza/larghezza di qualsiasi cosa prima che sia stata misurata. È stato assegnato quando è stato chiamato onSizeChanged, se si sostituisce onLayout tutte le viste dovrebbero avere un'altezza e una larghezza – tom502
@ tom502 puoi darmi un collegamento o un pezzo di codice? Sarebbe di grande aiuto. – MGDroid