Я сделал RecyclerView внутри NavigationView с пользовательским первым элементом в качестве эквивалента ListView's addHeaderView(). В нижней части этого макета заголовка я разместил EditText, чтобы я мог отфильтровать список ниже.Как заставить RecyclerView прокручивать, когда не хватает элементов, чтобы заполнить высоту sceen
Что я хотел сделать, так это прокрутить RecyclerView до тех пор, пока EditText не станет самым верхним элементом всякий раз, когда EditText получает фокус. Однако, если мой счетчик элементов достаточно мал, чтобы он не смог заполнить всю высоту навигационного экрана, RecyclerView отказывается прокручивать весь путь вверх и, таким образом, показывая немного больше заголовка, отличного от EditText. В качестве дополнительной проблемы, даже если список достаточно велик, он по-прежнему прокручивается вниз, как только я начинаю фильтровать элементы списка.
Как я могу заставить свой RecyclerView по-прежнему прокручивать весь путь, даже если у меня недостаточно элементов, чтобы заполнить высоту моего представления, чтобы остальная часть моего заголовка не заглядывала?
Вот визуализация того, что я пытаюсь достичь:
_______________
| HEADER LINE 1 |
| HEADER LINE 2 |
| HEADER LINE 3 |
| ------------- |
| Search box |
| ------------- |
| List item 1 |
| List item 2 |
| List item 3 |
---------------
Ожидаемое поведение, когда я сосредотачиваюсь на поле поиска:
_______________
| ------------- |
| Search box | <- becomes the topmost item. I can already achieve this
| ------------- | with RecyclerView.smoothScrollBy(dx, dy)
| List item 1 | except when the list is small enough (see below)
| List item 2 |
| List item 3 |
| List item 4 |
| | <- empty space is okay and is desired if dataset
| | is small enough
---------------
Что на самом деле происходит:
_______________
| HEADER LINE 2 | <- the header is 'bleeding' on top
| HEADER LINE 3 |
| ------------- |
| Search box | <- search box cannot take the topmost spot
| ------------- | as the recycler tries to position itself to fill in
| List item 1 | the bottom part with items
| List item 2 |
| List item 3 |
| List item 4 | <- items are pushed down to the bottom to fill
--------------- in the space
Вот фрагмент моего навигационного xml (просто ваша типичная настройка):
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true">
<android.support.v7.widget.RecyclerView
android:id="@+id/drawer_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.NavigationView>
ViewHolder с пользовательским заголовком здесь (RecyclerView адаптер):
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == HEADER) {
return new HeaderHolder(mHeaderView);
} else {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new ItemViewHolder(v);
}
}
Заголовок ящик просто XML макет я завышены в основной деятельности (я назначил слушателей и анимации там) и передается на мой RecyclerView через setHeaderView (заголовок View) Я сделал.
попробовал? Это тот же результат. https://stackoverflow.com/questions/26568087/parallax-header-effect-with-recyclerview –
Пила уже. Мой заголовок имеет элементы управления (включая расширяемый макет), поэтому эффект параллакса разрушит его. Не говоря уже о том, что использование библиотеки для нее было бы излишним, поскольку я уже успешно реализовал собственный заголовок в моем RecyclerView. Это была только позиция прокрутки, это проблема. – dmonloz
Попробуйте изменить высоту представления ресайлера на 'wrap_content'. –