android:layout_marginBottom似乎在2.2(Froyo)中无法正常工作

时间:2010-11-04 19:05:15

标签: android layout

我在Relative布局中有这个ImageView块:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dip"
    android:layout_marginLeft="81dip"
    android:src="@drawable/swipehelp"
    />

这将图像绘制在Android 1.6上的普通和高密度分辨率屏幕中的预期位置,但是在2.2上它似乎忽略了layout_marginBottom并始终在底部绘制对齐的图像。有没有人见过这个,如果有,你知道修复吗?

编辑1:

它位于如此声明的RelativeLayout内:

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/excusescreen"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/woodbg">

编辑2:

以下是完整的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/excusescreen"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/woodbg">
   <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentTop="true"    
    >
    <ImageView
            android:id="@+id/excHomeBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/catexcusehomebtn"
            >
    </ImageView>
    <ImageView
            android:id="@+id/excBackToCatsBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/backtocats"
            >
    </ImageView>
     </LinearLayout>
     <ViewFlipper
    android:id="@+id/excuses"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dip"
     >
     </ViewFlipper>
     <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentBottom="true" 
    >
    <ImageView
        android:id="@+id/emailItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/emailit"
        >
    </ImageView>
    <TextView
        android:id="@+id/numExcusesText"
        android:layout_width="100dip"
        android:layout_height="30dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:textColor="#66ffffff"
        android:gravity="center"
        android:textSize="18dip"
        android:textStyle="bold"
        android:text="1/13"
        >
    </TextView>
    <ImageView
        android:id="@+id/shareItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/shareit"
        >
    </ImageView>
     </LinearLayout>
     <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dip"
    android:layout_marginLeft="81dip"
    android:src="@drawable/swipehelp"
    />

 </RelativeLayout>

编辑3

alt text

5 个答案:

答案 0 :(得分:14)

FrameLayout添加View并添加以下内容:

android:id="@+id/gap"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_alignParentBottom="true"

现在,为了修复layout_marginBottom,请使用上面的内容:

android:layout_above="@+id/gap"

答案 1 :(得分:3)

好的,所以在经过大量搜索之后,我发现这个问题的链接实际上可以追溯到09年,但2010年的评论显示2.2中的alignParentBottom存在很多问题。 http://code.google.com/p/android/issues/detail?id=1394

所以,我做了一个解决方法,将整个事物放在FrameLayout中,并使ImageView成为我的RelativeLayout之外的子项并放置在layout_gravity中。这样做了,并使其适用于所有版本。这是最终的代码:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <RelativeLayout
    android:id="@+id/excusescreen"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/woodbg"
    android:clipChildren="true">
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentTop="true"    
    >
    <ImageView
            android:id="@+id/excHomeBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/catexcusehomebtn"
            >
    </ImageView>
    <ImageView
            android:id="@+id/excBackToCatsBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/backtocats"
            >
    </ImageView>
</LinearLayout>
<ViewFlipper
    android:id="@+id/excuses"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dip"
>
</ViewFlipper>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentBottom="true" 
    >
    <ImageView
        android:id="@+id/emailItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/emailit"
        >
    </ImageView>
    <TextView
        android:id="@+id/numExcusesText"
        android:layout_width="100dip"
        android:layout_height="30dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:textColor="#66ffffff"
        android:gravity="center"
        android:textSize="18dip"
        android:textStyle="bold"
        android:text="1/13"
        >
    </TextView>
    <ImageView
        android:id="@+id/shareItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/shareit"
        >
    </ImageView>
    </LinearLayout>
    </RelativeLayout>
    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|bottom"
    android:layout_marginBottom="50dip"
    android:src="@drawable/swipehelp"
    />
    </FrameLayout>

答案 2 :(得分:1)

对于我来说,对于我来说是相同的,直到我将layout_height更改为最外层'RelativeLayout`上的fill_parent

显然,将其设置为wrap_content时,无法正确识别界限。如果没有特殊原因让RelativeLayout的宽度和高度包含在内容中,我会说明就是这样。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/excusescreen"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/woodbg"
    android:clipChildren="true">
    <!-- all the other stuff -->
</RelativeLayout>

答案 3 :(得分:1)

如果您不想添加其他视图,可以使用InsetDrawable设置android:insetBottom

答案 4 :(得分:1)

我们遇到了同样的问题,并使用了使用ParentBottom定位的LinearLayout,给出了填充,并将图像/按钮/视图放在其中。使用目标上的边距而不是LinearLayout上的填充也可以顺便使用。