FrameLayout边距不起作用

我的布局结构是这样的

LinearLayout FrameLayout ImageView ImageView FrameLayout TextView LinearLayout 

我为FrameLayout中的两个ImageView设置了margin。 但是FrameLayout页边距被丢弃,并且它总是将图像设置在左上angular。 如果我从FrameLayout更改为LinearLayout边距的工作正常。 如何处理这个?

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/inner1" > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:layout_width="24px" android:layout_height="24px" android:id="@+id/favicon" android:layout_marginLeft="50px" android:layout_marginTop="50px" android:layout_marginBottom="40px" android:layout_marginRight="70px" /> <ImageView android:layout_width="52px" android:layout_height="52px" android:id="@+id/applefavicon" android:layout_marginLeft="100px" android:layout_marginTop="100px" android:layout_marginBottom="100px" android:layout_marginRight="100px" /> </FrameLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" android:layout_marginLeft="10px" android:layout_marginTop="20px" android:textColor="#FFFFFF" android:textSize = "15px" android:singleLine = "true" /> </LinearLayout> 

我自己也有同样的问题,并注意到设置layout_边距不起作用,直到你还设置你的ImageView的布局的重力,即在XML资源文件,或从代码: FrameLayout.LayoutParams.gravity = Gravity.TOP; android:layout_gravity="top" FrameLayout.LayoutParams.gravity = Gravity.TOP;

为了更清楚为什么。 FrameLayout.onLayout()调用包含这个(至less在api v2.3.4中):

  // for each child final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int gravity = lp.gravity; if (gravity != -1) { // handle all margin related stuff 

所以如果重力是-1,则不会有保证金计算。 而事情是,FrameLayout.LayoutParams中的重力定义为:

  gravity = a.getInt(com.android.internal.R.styleable.FrameLayout_Layout_layout_gravity, -1); 

所以如果没有设定重力,就不会有保证金的计算。

添加你的xml这个属性并重新运行

机器人:layout_gravity = “顶”

一切都好!

而且你不要像这样设置新的布局参数。

 FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(WallpapersActivity.ScreenWidth/2, layH); 

像这样使用:

 FrameLayout.LayoutParams llp = (LayoutParams) myFrameLay.getLayoutParams(); llp.height = 100; llp.width = 100; myFrameLay.setLayoutParams(llp); 

采取从FrameLayout文档( 链接 )

框架布局的大小是其最大的孩子(加上填充)的大小,可见与否(如果FrameLayout的父母许可)。

这似乎描述了这个事实,它将剥离利润。 就像提到的巨石,你可以尝试切换到填充,因为它可以用来产生类似的效果,如果做得好。

出于好奇,你提到它在使用LinearLayout容器时工作正常,为什么selectFrameLayout?

你有没有尝试android:layout_gravity? 尝试在你的ImageViews中使用android:padding而不是android:layout_margin。 AFAIK边距在帧布局上无法正常工作。 我甚至不得不为此编写自定义布局。 顺便说一句,你想如何把你的ImageViewsalignment?

尝试setCropToPadding(true)到ImageView,这应该有所帮助!

您必须在XML资源文件中设置您的ImageView的布局重力顶部即android:layout_gravity =“top”,或者从代码:FrameLayout.LayoutParams.gravity = Gravity.TOP