框架布局边距不工作

我的布局结构是这样的

LinearLayout
FrameLayout
ImageView
ImageView
FrameLayout
TextView
LinearLayout

我已经为 FrameLayout 中的两个 ImageView 设置了边距。但是 FrameLayout 边距被丢弃,并且它总是将 Image 设置为左上角。如果我从 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>
43546 次浏览

你试过机器人版本吗?尝试在你的 ImageViews 中使用 android: padding 而不是 android: lay_ edge。AFAIK 边距在帧布局上不能正常工作。我甚至曾经为此编写过自定义布局。顺便说一下,你想如何调整你的图像视图?

取自 FrameLayout 文档(链接)

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

这似乎描述了一个事实,即它将去除边缘。像大石头提到,你可以尝试切换到填充,因为它可以用来产生类似的效果,如果做得正确。

出于好奇,您提到在使用 LinearLayout容器时它工作得很好,为什么选择 FrameLayout?

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

添加 xml this 属性并重新运行

机器人:

一切都很好!

你不要像这样设置新的布局参数;

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);

尝试 setCropToPadd (真)到 ImageView,这应该有帮助!

为了更清楚地说明原因,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,就没有余量计算了。重点是,框架布局中的重力。LayoutParams 的定义如下:

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

因此,如果没有设置重力,就不会有余量计算。

您必须在 XML 资源文件中设置 ImageView 的布局重力顶部,例如,android: outs _ vity = “ top”,或者从代码中设置: FrameLayout。重力 = 重力