Отримайте поле подання


95

Як я можу отримати значення межі подання з дії? Вигляд може бути будь-якого типу.

Після невеликого пошуку я знайшов способи отримати заповнення подання, але не міг знайти нічого на Маргіні. Хтось може допомогти?

Я пробував щось подібне,

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

Це працює, але у наведеному вище коді я припустив, що подання є LinearLayout. Але мені потрібно отримати marginатрибут навіть тоді, коли я не знаю тип подання.

Відповіді:


180

спробуйте це:

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


7
Насправді я очікував чогось подібного, але я не думаю, що прямий клас називається LayoutParams. Є класи , як FrameLayout.LayoutParams, RelativeLayout.LayoutParams, але нічого , як LayoutParamsсам по собі. І оскільки я не знаю тип подання, я не можу використовувати жоден із попередніх класів.
Arnab Chakraborty

5
що ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();тоді?
Володимир

Має бути ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer


4

тепер використовуйте цей відредагований код. це вам допоможе

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

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

Методи, про які ви згадали, дають ліве, праве, верхнє та нижнє положення подання, мені потрібні поля.
Arnab Chakraborty

Не обов'язково. Вид може бути розміщений у LinearLayoutз horizontalорієнтацією. Якщо це другий вигляд у макеті, view.getLeft()метод дасть мені координату свого лівого, але лівого поля подання від сусіднього вигляду.
Arnab Chakraborty

Що робити, якщо вигляд є LinearLayout?
Arnab Chakraborty

3

Як пропонували інші, layout_margin # - це простір між батьківським # краєм та вашим видом.

  • # замінює "Лівий", "Правий", "Верхній" або "Нижній"

Отримання / встановлення полів працювало для мене з:

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

Звичайно, мій View справді був ViewGroup, а батько - ViewGroup. У більшості випадків вам слід передати параметри макета до батьківського класу View LayoutParams (у цьому випадку це ViewGroup і RelativeLayout)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.