获取视图的边距

98

我该如何从Activity中获取任意类型View的margin值?

经过一番搜索,我发现了获取视图padding的方法,但是找不到关于Margin的任何内容。有人能帮忙吗?

我尝试了以下代码:

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

这样做是可行的,但在以上代码中,我假设视图是一个LinearLayout。 但是,即使我不知道视图类型,我仍然需要获取margin属性。

4个回答

187

试试这个:

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.LayoutParamsRelativeLayout.LayoutParams 这样的类,但并没有像 LayoutParams 这样的单独存在的类。而且由于我不知道视图的类型,所以我不能使用之前提到的任何一个类。 - Arnab Chakraborty
5
那么ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();呢? - Vladimir
应该是 ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); - rockhammer

36

5
现在使用这个编辑过的代码,它会帮助您。
FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams();

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

你所提到的方法给出了视图的左侧、右侧、顶部和底部位置,但我需要得到边距。 - Arnab Chakraborty
不一定。一个视图可以放置在具有水平方向的LinearLayout中。如果它是布局中的第二个视图,则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)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接