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