Как я могу добавить пустое пространство в конец ListView?
У меня есть несколько элементов в ListView, которые прокручиваются за пределы экрана.
Я бы хотел, чтобы в конце просмотра было пустое место. То есть пользователь должен иметь возможность прокручивать последний элемент так, чтобы последний элемент находился посередине области просмотра.
Я мог бы использовать OverScroller, но я думаю, что это только позволило бы представлению иметь эффект бодрости, как это часто можно увидеть на iPhone.
Есть что-то, что я мог упустить из виду?
Экран с прокруткой до дна должен выглядеть примерно так:
6 ответов
- Раздуйте любой макет по вашему выбору (это может быть XML или ImageView без рисования и с заданными высотой и шириной по вашему выбору)
- Измерьте высоту экрана и создайте новые LayoutParams и установите его высоту равной 1/2 от высоты экрана
- Установите новые параметры макета на вашем раздутом виде
- Используйте 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);