定位Android 4.3时出现奇怪的XML布局错误

时间:2013-09-11 20:55:41

标签: android android-xml android-4.3-jelly-bean

在针对API级别18构建应用程序时,我遇到了一个非常奇怪的XML布局文件错误。在API级别17中没有这种情况。我在Android 4.3设备上运行该应用程序,并且该错误坚持使用这三种设备。

这是它的样子:

API 17(正确):

API 17

API 18(不正确):

API 18

我正在使用StickyGridHeaders library,以下是我的getHeaderView()方法:

@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
    RowItem holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.seasons_row_header, parent, false);
        holder = new RowItem();
        holder.title = (TextView) convertView.findViewById(R.id.seasonTitle);
        holder.episodeCount = (TextView) convertView.findViewById(R.id.episodeCount);
        convertView.setTag(holder);
    } else {
        holder = (RowItem) convertView.getTag();
    }

    if (seasons.get(position).equals("00")) {
        holder.title.setText(R.string.stringSpecials);  
    } else {
        holder.title.setText(getString(R.string.showSeason) + " " + seasons.get(position));
    }

    int size = seasonEpisodeCount.get(Integer.valueOf(seasons.get(position)));
    holder.episodeCount.setText(size + " " + getResources().getQuantityString(R.plurals.episodes, size, size));

    convertView.setClickable(false);
    convertView.setFocusable(false);

    return convertView;
}

这是布局XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#80000000"
    android:padding="@dimen/list_padding" >

    <TextView
        android:id="@+id/seasonTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="@dimen/list_padding"
        android:layout_toLeftOf="@+id/episodeCount"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textIsSelectable="false"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/episodeCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seasonTitle"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/seasonTitle"
        android:gravity="bottom"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textIsSelectable="false" />

</RelativeLayout>

有没有其他人知道这里发生了什么?我发现它非常奇怪,它在针对API级别17时起作用,而在定位最新API级别时无效(18)。

更新

这就是以Android 4.3为目标的可视布局编辑器中的样子:

Visual layout editor

3 个答案:

答案 0 :(得分:2)

我设法自己解决了这个问题。

就像我说的,我正在使用StickyGridHeaders库并在我的应用程序中引用它。该库似乎是针对API级别17.我将其更改为级别18,编译并运行应用程序 - 非常成功!

总之:确保您的应用程序和库定位到相同的API级别。

答案 1 :(得分:1)

我也有同样的问题。 我的经验表明,交叉对齐是问题的原因(TextView @ + id / seasonTitle 具有属性 android:layout_toLeftOf =“@ + id / episodeCount “; TextView @ + id / episodeCount 的属性为 android:layout_alignBottom =”@ + id / seasonTitle“ layout_alignTop =“@ + id / seasonTitle”。其中一个布局不会刷新其子项正确。 更改布局 - 防止交叉对齐的XML,您不再有此问题。

答案 2 :(得分:0)

我有同样的问题:

  • 具有白色背景的ListView
  • 每个孩子在RelativeLayout中都有一个带有灰色背景,宽度和高度为match_parent的视图
在API 17上,每个都可以 在API 18+上,ListView是白色的

而不是设置固定高度,我将min_height放到View中,问题是(临时)解决了!

希望有所帮助