Как я могу добавить пустое пространство в конец ListView?

У меня есть несколько элементов в ListView, которые прокручиваются за пределы экрана.

Я бы хотел, чтобы в конце просмотра было пустое место. То есть пользователь должен иметь возможность прокручивать последний элемент так, чтобы последний элемент находился посередине области просмотра.

Я мог бы использовать OverScroller, но я думаю, что это только позволило бы представлению иметь эффект бодрости, как это часто можно увидеть на iPhone.

Есть что-то, что я мог упустить из виду?

Экран с прокруткой до дна должен выглядеть примерно так: Макет Android, где есть несколько меток, последняя из которых находится ближе к середине экрана

6 ответов

Решение
  1. Раздуйте любой макет по вашему выбору (это может быть XML или ImageView без рисования и с заданными высотой и шириной по вашему выбору)
  2. Измерьте высоту экрана и создайте новые LayoutParams и установите его высоту равной 1/2 от высоты экрана
  3. Установите новые параметры макета на вашем раздутом виде
  4. Используйте ListView's addFooterView() способ добавить это представление в конец списка (есть также addHeaderView())

Код для измерения высоты экрана

 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 Display display = wm.getDefaultDisplay();
 int screenHeight = display.getHeight();

Код для установки половины высоты экрана:

 View layout = inflater.inflate(R.layout.mylistviewfooter, container, false);
 ViewGroup.LayoutParams lp = layout.getLayoutParams();
 lp.height = screenHeight/2;
 layout.setLayoutParams(lp);
 myListView.addFooterView(layout);

В стороне: когда вы добавляете нижний колонтитул или представление заголовка к любому представлению списка, это нужно сделать перед добавлением адаптера. Кроме того, если вам нужно получить класс адаптера после этого, вам нужно знать, как вызывать адаптер списка getAdapter() вернет экземпляр HeaderViewListAdapter, в котором вам нужно будет вызвать его метод getWrappedAdapter. Примерно так:

 MyAdapterClassInstance myAdapter = (MyAdapterClassInstance) ((HeaderViewListAdapter) myListView.getAdapter()).getWrappedAdapter();

Принятый ответ слишком сложен, и addFooterView не для такого рода вещей. Правильный и более простой способ - установить paddingTop и paddingBottom, а для clipToPadding необходимо установить значение "false". В виде списка или сетки добавьте следующее:

    android:paddingTop="100dp"
    android:paddingBottom="100dp"
    android:clipToPadding="false"

Вы получите пустое пространство сверху и снизу, которое перемещается с помощью прокрутки пальцем.

Если у вас есть несколько списков в вашем приложении, создайте xml нижнего колонтитула, примерно так:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="200dp"
android:layout_width="match_parent"
android:layout_height="200dp"></LinearLayout>

а затем в коде используйте это:

listView.addFooterView(LayoutInflater.from(getActivity()).inflate(R.layout.empty200, null));

Это 100% работает. в адаптере установите свой код следующим образом

   //in getCount
   @Override
   public int getCount() {
   return ArrayList.size()+1;
      }
    //in getview make your code like this
    public View getView(final int i, View view, ViewGroup viewGroup) {

    view = inflter.inflate(R.layout.yourlayout, null);

    if(i<getCount()-1) {
     //your code
    }
    else{
    ViewGroup itemContainer =(ViewGroup) view.findViewById(R.id.container);
                itemContainer.setVisibility(View.INVISIBLE);
    }

    Return view;
    }

Это делает работу простым способом

      android:paddingBottom="100dp"
android:clipToPadding="false"

Попробуйте следующее:

View footer = new View(getActivity());
footer.setLayoutParams( new AbsListView.LayoutParams( LayoutParams.FILL_PARENT, 100 )); 
// 100 is the height, you can change it.
mListView.addFooterView(footer, null, false);
Другие вопросы по тегам