framelayout中的边距在Android 2.2中不起作用

时间:2014-07-19 16:01:11

标签: android android-layout android-activity android-2.2-froyo

我使用framelayout并在里面我有2个textview,如果我使用

android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"

我的布局在Android 2.2中显示不正确,而在Android 4.0中也一样正常。

这是完整的代码。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

          <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:gravity="left|center"
            android:text= "Testing String"
            android:textSize="15sp"
            android:textColor="@color/LIGHTGRAY"

            android:layout_gravity="left|top"/>

        <TextView

            android:id="@+id/ID_due_date"
            android:textStyle="bold"
            android:textSize="15sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
             android:text= "Testing String"
            android:layout_marginTop="10dp"
            android:layout_gravity="right"
            android:gravity="left|center"/>
        </FrameLayout>
</ScrollView>

在Android 2.2中,它看起来像这样

enter image description here

在Android 4.0 ICS中,它看起来像这样

enter image description here

2 个答案:

答案 0 :(得分:4)

Android 2.2(Froyo)和2.3(Gingerbread)中存在一个错误,其中FrameLayout内的边距不适用于未设置layout_gravity属性的子项。你可以在这里看到它:https://code.google.com/p/android/issues/detail?id=28057 这个bug已在Android 3.0(Honeycomb)中修复。

您的问题与此错误有关。您确实设置了layout_gravity属性,因此边距已正确应用 - 视图从顶部和侧面偏移10dp。不幸的是FrameLayout不知道如何衡量这些孩子,所以它的边界是在没有这些边距的情况下计算出来的 - 这就是孩子们在底部被切割的原因(10dp)。

高度为FrameLayout的{​​{1}}不会受此问题的影响,但在您的情况下,您的行为设置为match_parent。 (请注意即使您将高度设置为wrap_content,它仍将作为fill_parent使用,因为它位于wrap_content内。

请尝试使用填充 - 在大多数情况下(背景或可点击区域不重要)边距可以用填充替换。

答案 1 :(得分:1)

您可以使用填充:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left|top"
            android:gravity="left|center"
            android:paddingLeft="10dp"
            android:paddingTop="10dp"
            android:text="Testing String"
            android:textColor="@color/LIGHTGRAY"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/ID_due_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:gravity="left|center"
            android:paddingRight="10dp"
            android:paddingTop="10dp"
            android:text="Testing String"
            android:textSize="15sp"
            android:textStyle="bold" />
    </FrameLayout>

</ScrollView>