Obter margem de uma visão

95

Como posso obter o valor da margem de uma visualização de uma atividade? A visualização pode ser de qualquer tipo.

Depois de pesquisar um pouco, descobri maneiras de obter o preenchimento de uma visualização, mas não consegui encontrar nada no Margin. Alguém pode ajudar?

Eu tentei algo assim,

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

Isso funciona, mas no código acima, assumi que a visão era a LinearLayout. Mas eu preciso pegar omargin atributo mesmo quando não sei o tipo de visualização.

Arnab Chakraborty
fonte

Respostas:

180

tente isto:

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

as margens são acessíveis via

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

editar: talvez ViewGroup.MarginLayoutParamsfuncione para você. É uma classe base para outra LayoutParams.

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

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

Vladimir
fonte
7
Na verdade, eu estava esperando algo assim, mas não acho que haja nenhuma classe direta chamada LayoutParams. Há classes como FrameLayout.LayoutParams, RelativeLayout.LayoutParams, mas nada como LayoutParamsem si mesmo. E como não sei o tipo de vista, não posso usar nenhuma das classes anteriores.
Arnab Chakraborty
5
e ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();então?
Vladimir
Deve ser ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer
4

agora use este código editado. isso vai te ajudar

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

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
ilango j
fonte
Os métodos que você mencionou fornecem as posições esquerda, direita, superior e inferior da visualização, preciso das margens.
Arnab Chakraborty
Não necessariamente. Uma vista talvez colocado em uma LinearLayoutcom horizontalorientação. Se for a segunda vista no layout, o view.getLeft()método me daria a coordenada da sua esquerda, mas a margem esquerda da vista de sua vista adjacente.
Arnab Chakraborty
E se a visualização for um LinearLayout?
Arnab Chakraborty
3

Como outros sugeriram, layout_margin # é o espaço entre a # borda do pai e sua visualização.

  • # substitui "Esquerda", "Direita", "Superior" ou "Inferior"

Obter / definir margens funcionou para mim com:

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

Claro, meu View era de fato um ViewGroup e o pai era um ViewGroup também. Na maioria dos casos, você deve lançar seus parâmetros de layout para a classe View do pai, LayoutParams (neste caso, é ViewGroup e RelativeLayout)

Milosmns
fonte