Android ListView со сложным заголовком

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

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

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

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

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

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

Solutions Collecting From Web of "Android ListView со сложным заголовком"

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

  • 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()); 

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

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