我的布局结构是这样的
LinearLayout
FrameLayout
ImageView
ImageView
FrameLayout
TextView
LinearLayout
我为FrameLayout中的两个ImageView设置了margin。但FrameLayout边距被丢弃,它总是将图像设置为左上角。如果我从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>
答案 0 :(得分:220)
我自己也有同样的问题,并注意到设置layout_
边距不起作用,直到你在XML资源文件中设置ImageView的布局重力即android:layout_gravity="top"
,或者从代码{{1 }}
答案 1 :(得分:8)
为了更明确原因。 FrameLayout.onLayout()调用包含这个(至少在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);
因此,如果未设置重力,则不会计算保证金。
答案 2 :(得分:7)
添加你的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);
答案 3 :(得分:1)
取自FrameLayout文档(link)
框架布局的大小是其最大子项(加上填充)的大小,可见或不可见(如果FrameLayout的父级允许)。
这似乎描述了它会剥去利润的事实。就像上面提到的巨石一样,你可以尝试切换到填充,因为如果正确完成它可以用来产生类似的效果。
出于好奇,你提到它在使用LinearLayout
容器时工作正常,为什么选择FrameLayout?
答案 4 :(得分:0)
你试过android:layout_gravity吗?尝试在ImageViews中使用android:padding而不是android:layout_margin。 AFAIK边距在Frame布局上无法正常工作。我甚至不得不为此目的编写一次自定义布局。顺便说一下,你想怎么想把你的ImageViews?
答案 5 :(得分:0)
尝试setCropToPadding(true)到ImageView,这应该有所帮助!
答案 6 :(得分:0)
你必须设置你的ImageView的布局重力顶部,即android:layout_gravity =&#34; top&#34;在XML资源文件中,或从代码:FrameLayout.LayoutParams.gravity = Gravity.TOP