Android ListView со сложным заголовком - PullRequest
6 голосов
/ 24 февраля 2011

Я пытаюсь добавить сложный / нетривиальный заголовок в ListView (и чуть менее сложный нижний колонтитул), который должен прокручиваться вместе с остальным содержимым.

Заголовок состоит из

  • TextView с жирным текстом, черным прозрачным фоном и закругленными углами
  • TextView с обычным текстом, черный прозрачный фон
  • ImageView
  • нажимаемая кнопка (на самом деле ImageView с onClick) и разделитель

Я знаком с addHeaderView, но если я пытаюсь добавить сложное представление (состоящее из LinearLayout с несколькими дочерними элементами), я вижу только первый дочерний элемент сложного заголовка в виде списка в качестве заголовка.

Кроме того, дизайн нарушается (поскольку заголовок может быть стилизован прозрачно, а сам ListView - нет. Возможно, это можно решить, добавив больше стиля к самому ListView и его элементам (которые не должны быть прозрачными), но У меня сложилось впечатление, что я просто достигаю пределов ListViews.

Можно ли это сделать? Кто-нибудь знает какие-либо приложения (или, лучше, примеры кода), которые имеют подобный сложный заголовок? Все остальные примеры, которые мне удалось найти, - это тривиальные заголовки: кнопки, текстовые представления или изображения (онлайн и на SO) с едва интересным стилем.

Ответы [ 2 ]

5 голосов
/ 01 марта 2011

Я попытался переопределить мой прокручиваемый список с нуля, примерно так:

  • main.xml с фоновым изображением и одним ListView, с полем 20dip и некоторымиспецифический стиль:

    <item name="android:cacheColorHint">#00000000</item>
    <item name="android:scrollbars">@null</item>
    <item name="android:background">@android:color/transparent</item>
    
  • headerlayout.xml, содержащий линейный макет (вертикальный), содержащий TextView, ImageView и другой TextView.Первый TextView оформлен с использованием закругленных верхних углов, оба текстовых представления имеют прозрачный стиль, а на изображении - список кликов.

  • (аналогично стилизованный нижний колонтитул)
  • пользовательская запись для каждого элемента списка ссплошной белый фон.

Заголовок / нижний колонтитул добавляются примерно следующим образом

ListView list = (ListView) findViewById(R.id.list);
View header1 =  getLayoutInflater().inflate(R.layout.listheader, null, false);
View footer = getLayoutInflater().inflate(R.layout.listfooter, null, false);
ImageView image = (ImageView) header1.findViewById(R.id.image);

list.addHeaderView(header1, null, false);
list.addFooterView(footer, null, false);
list.setAdapter(new MenuAdapter());

Ничто из этого на самом деле не является особенным.Это в основном дело в правильном порядке, урезании и правильном оформлении.

0 голосов
/ 24 февраля 2011

Я бы предложил создать пользовательский вид для этого слишком сложного элемента списка.Очевидно, это то, что разработчики Android в Google IO тоже предложили.Если вы можете сделать это в пользовательском представлении, все ваши проблемы будут решены.

...