Добавление нижнего поля в последний элемент списка ListView
Мне нужно добавить, чтобы добавить ListView со сложными элементами фона: разные для четных/нечетных и закругленных углов сверху и снизу. Это выглядит так:
![ListView top]()
Я реализовал все это через список уровней, но есть еще одна вещь, которую я хочу сделать.
Теперь нижний элемент находится в нижней части экрана. Лучше добавить некоторое пространство.
![ListView bottom looks not good]()
Я не хочу добавлять нижнее поле в ListView, мне нужен запас только для последнего элемента.
Как я это вижу:
Footer
Вид взлома - добавьте нижний колонтитул с пустой TextView в ListView. Но нижние колонтитулы - довольно неустойчивые вещи, они обычно исчезают после notifyDataSetChanged, и нет способа вернуть их.
Изображение с прозрачными пикселями
Я попросил дизайнера добавить прозрачные пиксели к нижнему фоновому ресурсу. К сожалению, в этом случае вертикальное центрирование полностью нарушается.
Например, существует 9patch, например:
![9patch]()
И макет, подобный этому:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- View with background with transparent pixels on bottom -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
android:id="@+id/item"
android:background="@drawable/some_bgr"
android:padding="10dp"
>
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
android:text="Title"
android:layout_gravity="center"
android:textSize="18sp"
/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Detail"
android:layout_gravity="center"
android:textSize="18sp"
/>
</LinearLayout>
<!-- Just for marking place took by view -->
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_below="@id/item"
android:background="#88ff55"
/>
</RelativeLayout>
Результат:
![Result]()
Как вы видите, центрирование не работает. К сожалению.
(BTW, если указать этот 9patch в качестве фона для TextView, то центрирование работает хорошо. Если вы знаете какую-либо статью, объясняя это, сообщите мне.)
Добавить нижний предел к последнему элементу в реализации адаптера
Это должно работать, но по неизвестной причине я все еще не могу заставить его работать.
Мне это не нравится, потому что мне не нравится изменять размеры кода.
Так
Существует уже мнимый способ - постройте XML-чертеж с определенным растровым изображением и маркой. В соответствии с концепцией drawables это должно быть возможно, но я не могу найти реализацию. Может быть, кто-нибудь знает?
Любые другие идеи?
Ответы
Ответ 1
В вашем ListView
установите paddingBottom
и clipToPadding="false"
.
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="8dp"
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"/>
-
Это также работает для RecyclerView
.
-
Используйте android:scrollbarStyle="outsideOverlay"
, если вы хотите, чтобы полоса прокрутки не переполнялась в заполненную область.
Ответ 2
добавить пустой нижний колонтитул в свой список следующим образом:
TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);
Ответ 3
Ответ на часы - лучший и довольно умный. Вы также можете создать пустой нижний колонтитул.
Ответ 4
вы также можете сделать это из кода, если хотите, например, здесь я реагирую на
в EditText различные ситуации:
if(s.toString().length()>0)
{
contacts_lv.setClipToPadding(false);
contacts_lv.setPadding(0,0,0,270*screenDensity);
}
else
{
contacts_lv.setClipToPadding(true);
contacts_lv.setPadding(0,0,0,0);
}
Ответ 5
Я думаю, вы хотите добавить маржу только к последнему элементу:
Таким образом, вы можете сделать таким образом, в вашем методе getview индекс элемента списка и проверить, является ли его последний элемент, а затем пропорционально добавлять маржу к представлению.