Как добавить пустое пространство в конец 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]()
Ответы
Ответ 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);