Ottieni il margine di una vista


95

Come posso ottenere il valore del margine di una visualizzazione da un'attività? La vista può essere di qualsiasi tipo.

Dopo un po 'di ricerca ho scoperto dei modi per ottenere il riempimento di una vista, ma non sono riuscito a trovare nulla su Margin. Qualcuno può aiutare?

Ho provato qualcosa di simile

ViewGroup.LayoutParams vlp = view.getLayoutParams();
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin;

Funziona, ma nel codice sopra ho ipotizzato che la vista fosse un file LinearLayout. Ma ho bisogno di ottenere l' marginattributo anche quando non conosco il tipo di visualizzazione.

Risposte:


180

prova questo:

View view = findViewById(...) //or however you need it
LayoutParams lp = (LayoutParams) view.getLayoutParams();

i margini sono accessibili tramite

lp.leftMargin;
lp.rightMargin;
lp.topMargin;
lp.bottomMargin;

modifica: forse ViewGroup.MarginLayoutParamsfunzionerà per te. È una classe base per altri LayoutParams.

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html


7
In realtà mi aspettavo qualcosa del genere, ma non credo che ci sia una classe diretta chiamata LayoutParams. Ci sono classi come FrameLayout.LayoutParams, RelativeLayout.LayoutParamsma niente come LayoutParamsin sé. E poiché non conosco il tipo di visualizzazione, non posso utilizzare nessuna delle classi precedenti.
Arnab Chakraborty

5
e ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();allora?
Vladimir

Dovrebbe essere ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
Rockhammer


4

ora usa questo codice modificato. questo ti aiuterà

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams();

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin

I metodi che hai citato danno le posizioni sinistra, destra, superiore e inferiore della vista, ho bisogno dei margini.
Arnab Chakraborty

Non necessariamente. Una vista può essere posizionata in una LinearLayoutcon horizontalorientamento. Se è la seconda vista nel layout, il view.getLeft()metodo mi darebbe le coordinate della sua sinistra ma il margine sinistro della vista dalla sua vista adiacente.
Arnab Chakraborty

E se la vista fosse un LinearLayout?
Arnab Chakraborty

3

Come altri hanno suggerito, layout_margin # è lo spazio tra il bordo # del genitore e la tua vista.

  • # sostituisce "Sinistra", "Destra", "Alto" o "Basso"

Ottenere / impostare i margini ha funzionato per me con:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams();
params.topMargin += 20;
mView.requestLayout();

Ovviamente, il mio View era effettivamente un ViewGroup e anche il genitore era un ViewGroup. Nella maggior parte dei casi, dovresti trasmettere i parametri del layout alla classe View LayoutParams del genitore (in questo caso è ViewGroup e RelativeLayout)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.