获取视图边距


95

如何从活动中获取视图的边距值?视图可以是任何类型。

经过一些搜索,我找到了获取视图填充的方法,但是在Margin上找不到任何内容。有人可以帮忙吗?

我尝试过这样的事情

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

这可行,但是在上面的代码中,我假定视图为LinearLayout。但是,margin即使我不知道视图类型,也需要获取属性。

Answers:


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.LayoutParamsLayoutParams本身没有类似的类。而且由于我不知道视图的类型,因此无法使用任何以前的类。
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

不必要。视图可能LinearLayouthorizontal方向放置。如果它是布局中的第二个视图,则该view.getLeft()方法将为我提供其左视图的坐标,但是是其相邻视图的视图的左边界。
Arnab Chakraborty

如果View是一个视图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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.