【发布时间】:2013-09-11 20:55:40
【问题描述】:
在针对 API 级别 18 构建应用程序时,我遇到了一个非常特殊的 XML 布局文件错误。API 级别 17 不会发生这种情况。我在 Android 4.3 设备上运行该应用程序,并且该错误在所有三台设备上都存在。
它是这样的:
API 17(正确):
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 为目标的可视化布局编辑器中的样子:
【问题讨论】:
-
你试过删除这个:android:layout_toLeftOf="@+id/episodeCount" 我知道有时交叉引用位置会导致奇怪的行为......
-
我刚试过。它使 TextView 出现,但另一个呈现在它之上:-(
-
这是一个开始... :) 尝试从 episodeCount 文本视图中的 @+id/seasonTitle 中删除“+”
-
没有尝试,我怀疑这会奏效。需要 + 来创建 ID。
-
提醒任何遇到此问题(或类似问题)的人:它似乎与
RelativeLayout如何在滚动容器中处理MeasureSpec.UNSPECIFIED的更新行为有关(即 @ 987654332@ 或ListView)。阅读RelativeLayoutdocumentation中的注释了解更多详情,并参考#59700 on the Android issue tracker。
标签: android android-xml android-4.3-jelly-bean