2013-09-11 3 views
3

У меня возникает необычная ошибка с файлом макета XML при создании приложения при настройке уровня API на уровне 18. Это не происходит с уровнем API 17. Я запускаю приложение на устройствах Android 4.3, и ошибка сохраняется на всех трех устройствах.Странная ошибка компоновки XML при таргетинге на 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).

Update:

Это то, что это выглядит как в визуальном редакторе макета с Android 4.3 в качестве цели:

Visual layout editor

+0

Вы пытались удалить это: android: layout_toLeftOf = "@ + id/episodeCount" Я знаю, что иногда перекрестные ссылки ссылаются на странное поведение ... – TacB0sS

+0

Я просто попробовал. Это заставляет TextView появляться, но другой отображается поверх него :-( –

+0

Его начало ... :) Попробуйте удалить «+» из обоих символов @ + id/seasonTitle в эпизодеCount textview – TacB0sS

ответ

2

мне удалось решить этот вопрос сам.

Как я уже сказал, я использую библиотеку StickyGridHeaders и ссылаюсь на нее в своем приложении. Похоже, что библиотека ориентировалась на уровень API уровня 17. Я изменил его на уровень 18, скомпилировал и запустил приложение - большой успех!

В заключение: Убедитесь, что ваше приложение и библиотеки нацелены на один и тот же уровень API.

0

У меня есть один и тот же вопрос:

  • ListView с белым фоном
  • каждый ребенок имеет вид с серым фоном и шириной и высотой match_parent, в RelativeLayout

на API 17, все нормально по API 18+, ListView белый

вместо установки фиксированной высоты, я помещаю min_height в вид, и проблема (временная) решена!

надеюсь, что это поможет

1

У меня такая же проблема, тоже. Мои опыты показали, что пересекла выравнивания являются причиной проблемы (TextView @ + идентификатор/seasonTitle имеет свойство андроида: layout_toLeftOf = "@ + идентификатор/episodeCount"; TextView @ + идентификатор/episodeCount обладает свойствами андроид: layout_alignBottom = «@ + идентификатор/seasonTitle» и layout_alignTop = «@ + идентификатор/seasonTitle» Один из макетов не обновят свои Чайлдс правильно Изменение макета XML, что.. скрещенные выравнивания предотвращены, у вас больше нет этой проблемы.