【问题标题】:Margins inside framelayout is not working in Android 2.2框架布局内的边距在 Android 2.2 中不起作用
【发布时间】:2014-07-19 16:01:11
【问题描述】:

我使用 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 中是这样的

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

【问题讨论】:

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


    【解决方案1】:

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

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

    FrameLayout 与高度match_parent 不会受到此问题的影响,但在您的情况下,您有一个 wrap_content 行为集。 (请注意,即使您将高度设置为 fill_parent,它仍将作为 wrap_content 工作,因为它位于 ScrollView 内部)。

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

    【讨论】:

    • 是的,填充有效。但是如果我迁移到 ICS 或其他更高版本,它不会给我带来任何问题吗?
    • 不,在这种情况下填充不会有问题。如果需要,您可以在 ICS(或更高版本)上对其进行测试:)
    • 感谢您的帮助:)
    【解决方案2】:

    您可以使用填充:

    <?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>
    

    【讨论】:

      猜你喜欢
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多