В ListView - нижний колонтитул в нижней части экрана
У меня есть ListView с нижним колонтитулом, добавленным с listview.addFooterView(footerView);
все работает так, как ожидалось, за исключением одного случая: когда элементы моего listview не заполняют весь экран, я хотел бы, чтобы нижний колонтитул был внизу экрана, а не в середине. Есть ли способ сделать это легко? Или мне изменить макет?
спасибо
EDIT: это может помочь (это то, что я хочу)
3 ответов
если вы хотите, чтобы он всегда был в нижней части экрана, независимо от того, как долго ваш ListView
есть, тогда избавьтесь от listview.addFooterView(footerView);
и использовать RelativeLayout. Give your
ListView ' свойство
android:layout_alignParentTop="true"
и имущества в футере
android:layout_alignParentBottom="true"
если это не решит вашу проблему, пожалуйста, будьте немного более конкретным о том, что вы хотите, и представьте картину того, что вы хотите, если это возможно.
редактировать
после прочтения комментарии это может сработать. Возможно, есть более простой способ, но вы можете сделать что-то вроде
listView.post(new Runnable()
{
public void run()
{
int numItemsVisible = listView.getLastVisiblePosition() -
listView.getFirstVisiblePosition();
if (itemsAdapter.getCount() - 1 > numItemsVisible)
{
// set your footer on the ListView
}
else
{
footerView.setVisibility(View.VISIBLE);
}
}
footerView
будет таможня layout
что вы создадите со свойствами, на которые я ссылался выше. Это должно установить значение visible
если элементов не больше, чем может поместиться на экране. Если они больше, чем могут поместиться, то вы применяете вид нижнего колонтитула на ListView
как вы сейчас. Это может быть не лучший способ, но это первое, что приходит на ум. Вы бы просто запустили этот код прежде чем установить Adapter
.
вы не можете использовать нижний колонтитул ListView в качестве нижнего колонтитула для всего макета. Вам лучше использовать RelativeLayout в качестве корневого элемента для вашего макета, а затем прямой дочерний элемент, содержащий представление нижнего колонтитула с атрибутом: android: layout_alignParentBottom="true"
в дополнение к @ codeMagic response вы можете добавить прослушиватель, чтобы проверить, когда ваш адаптер обновляется, а затем обновить нижний колонтитул
registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
updateSmartFooter();
}
});
где updateSmartFooter - это функция, которую он описал
private void updateSmartFooter {
listView.post(new Runnable()
{
public void run()
{
int numItemsVisible = listView.getLastVisiblePosition() -
listView.getFirstVisiblePosition();
if (itemsAdapter.getCount() - 1 > numItemsVisible)
{
// set your footer on the ListView
}
else
{
footerView.setVisibility(View.VISIBLE);
}
}
}
}