В ListView - нижний колонтитул в нижней части экрана

У меня есть ListView с нижним колонтитулом, добавленным с listview.addFooterView(footerView);

все работает так, как ожидалось, за исключением одного случая: когда элементы моего listview не заполняют весь экран, я хотел бы, чтобы нижний колонтитул был внизу экрана, а не в середине. Есть ли способ сделать это легко? Или мне изменить макет?

спасибо

EDIT: это может помочь (это то, что я хочу) enter image description here

3 ответов


если вы хотите, чтобы он всегда был в нижней части экрана, независимо от того, как долго ваш ListView есть, тогда избавьтесь от listview.addFooterView(footerView); и использовать RelativeLayout. Give yourListView ' свойство

 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);
            }
         }
      }
}