如何解决FrameLayout页边距不起作用
| 我的布局结构是这样的LinearLayout
FrameLayout
ImageView
ImageView
FrameLayout
TextView
LinearLayout
我为FrameLayout内的两个ImageView设置了margin \。但是FrameLayout的边距将被丢弃,并且始终将Image设置为左上角。如果我从FrameLayout更改为LinearLayout,则margin的工作正常。如何处理呢?
<?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>
解决方法
我本人也遇到同样的问题,并注意到设置setting2ѭ边距不起作用,直到您还设置了ImageView的布局重力,即在XML资源文件中或从代码:
FrameLayout.LayoutParams.gravity = Gravity.TOP;
中设置了android:layout_gravity=\"top\"
。
,为了更清楚地说明原因。 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);
因此,如果未设置重力,将不会进行边距计算。
,添加您的XML这个属性,然后重新运行
android: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
容器时它确实可以正常工作,为什么选择FrameLayout?
,您尝试过android:layout_gravity吗?尝试在您的ImageViews中使用android:padding而不是android:layout_margin。 AFAIK页边距在框架布局上无法正常工作。我什至不得不为此目的编写自定义布局。顺便说一句,您如何希望继承ImageViews?
,尝试setCropToPadding(true)到ImageView,这应该有所帮助!
,您必须在XML资源文件中设置ImageView的布局重力顶部,即android:layout_gravity = \“ top \”,或从代码中设置:FrameLayout.LayoutParams.gravity = Gravity.TOP
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。