自Android SDK版本18起,“match_parent”有时表现不正确

时间:2014-01-03 12:10:43

标签: android android-layout

我在使用StickyGridHeaders库时发现了一种奇怪的行为。就像任何列表项一样,库允许我们使用任何布局作为标题视图。这是我的标题视图布局定义:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#228B22"
    android:orientation="vertical" >
    <TextView
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:paddingBottom="4dp"
        android:paddingLeft="4dp"
        android:layout_marginTop="4dp"
        android:textColor="#ffffff"
        android:background="#FF8C00"
        android:textSize="15sp"
        android:textStyle="bold" />
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="6dp"
        android:background="#00FFFF" >
    </FrameLayout>

</LinearLayout>

标题视图非常简单:标题的TextView和下面的分隔符。

但是,在我的设备中调试(运行4.4.2 KitKat)时,标题看起来很奇怪。我没有足够的信誉发布图片,请click here查看图片(托管在Google云端硬盘中)。

我在布局中添加了背景颜色来说明问题。在屏幕截图中,标题“A”是粘性的,并且显示正确。但是,对于非粘性标题,如“B”和“C”,您可以看到标题的宽度和分隔符不正确。 TextView和FrameLayout的宽度都在xml文件中设置为“match_parent”,但在屏幕截图中,非粘性标题的TextView显示为好像它们被设置为“wrap_content”。更奇怪的是分隔符 - 我尝试使用不同的文本作为标题,结果是分隔符的宽度与其上方的TextView的(不正确的)宽度完全对齐,而不是父级的可用宽度!

起初我以为我错误地写了布局。然后,当我将库示例复制到新项目时,我发现问题仍然存在。所以我转向SDK版本,并尝试将目标SDK版本更改为17.令我惊讶的是,一切看起来都正确。 (Click here for screenshot)

然后我将目标SDK版本提升到18,问题再次出现。

据我所知,不同SDK版本的布局可能有所不同,但我不明白为什么“match_parent”在较新的SDK版本中表现不同。

1 个答案:

答案 0 :(得分:0)

不确定是否有人遇到过和我一样的问题,但我终于发现了什么错误: maven存储库中的StickyGridHeaders库与Github上的不匹配。前者应该是一个旧版本,因为我用Github上的库替换了库后,问题就消失了。