Получить поле зрения - PullRequest
       2

Получить поле зрения

90 голосов
/ 19 сентября 2011

Как я могу получить значение маржи для вида из действия?Представление может быть любого типа.

После небольшого поиска я нашел способы получить отступы для вида, но не смог найти ничего на полях.Кто-нибудь может помочь?

Я пробовал что-то вроде этого,

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

Это работает, но в приведенном выше коде я предположил, что представление LinearLayout.Но мне нужно получить атрибут margin, даже если я не знаю тип представления.

Ответы [ 4 ]

171 голосов
/ 19 сентября 2011

попробуйте это:

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

поля доступны через

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

редактирование: возможно ViewGroup.MarginLayoutParams будет работать для вас. Это базовый класс для других LayoutParams.

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

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

29 голосов
/ 28 октября 2011

Попробуйте

ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) view.getLayoutParams()

vlp.rightMargin
vlp.bottomMargin
vlp.leftMargin
vlp.topMargin

Это вернуло правильные поля для моего просмотра по крайней мере.

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

4 голосов
/ 19 сентября 2011

теперь используйте этот отредактированный код.это поможет вам

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

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
2 голосов
/ 05 мая 2014

Как и предполагали другие, layout_margin # - это пространство между краем # родителя и вашим видом.

  • # заменяет «Влево», «Вправо», «Вверх» или «Вниз»

Получение / установка полей работало для меня с:

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

Конечно, мой View действительно был ViewGroup, а родитель также был ViewGroup. В большинстве случаев вы должны преобразовать параметры макета в родительский класс View LayoutParams (в данном случае это ViewGroup и RelativeLayout)

...