Подтвердить что ты не робот

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

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

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

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

Есть ли что-то, что я мог бы упустить?

Скроллированный экран должен выглядеть примерно так: Android mockup where there are a number of labels the last of which is near the middle of the screen

4b9b3361

Ответ 1

  • Наполните любой макет по вашему выбору (это может быть XML и ImageView без рисования и с установленной высотой и шириной по вашему выбору)
  • Измерьте высоту экрана и создайте новые LayoutParams и установите высоту его на 1/2 высоты экрана.
  • Задайте новые параметры макета на вашем увеличенном виде
  • Используйте метод ListView 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);

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

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

Ответ 2

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

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

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

Ответ 3

этот 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;
    }

Ответ 4

если у вас есть несколько списков в вашем приложении, создайте 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));

Ответ 5

добавьте эти строки в ваш XML файл RecyclerView для архивации этих результатов.

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

Ответ 6

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

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