Tôi đã tạo một RecyclerView bên trong một NavigationView với một mục đầu tiên tùy chỉnh tương đương với ListView's addHeaderView(). Ở phần dưới cùng của bố cục tiêu đề đó, tôi đã đặt EditText để tôi có thể lọc ra danh sách bên dưới.Làm thế nào để buộc RecyclerView cuộn khi không có đủ các mục để lấp đầy chiều cao của sceen
Điều tôi muốn làm là cuộn RecyclerView cho đến khi EditText là mục trên cùng bất cứ khi nào EditText tăng tiêu điểm. Tuy nhiên nếu số mục của tôi đủ nhỏ để nó không thể lấp đầy toàn bộ chiều cao của NavigationView, RecyclerView từ chối di chuyển tất cả các con đường lên và do đó hiển thị thêm một chút tiêu đề khác với EditText. Là một vấn đề được thêm vào, ngay cả khi danh sách đủ lớn, nó vẫn cuộn xuống khi tôi bắt đầu lọc các mục trong danh sách.
Làm thế nào tôi có thể buộc RecyclerView vẫn cuộn hết cỡ ngay cả khi tôi không có đủ mục để lấp đầy chiều cao của phần xem để phần còn lại của tiêu đề không nhìn trộm?
Dưới đây là một hình dung về những gì tôi đang cố gắng để đạt được:
_______________
| HEADER LINE 1 |
| HEADER LINE 2 |
| HEADER LINE 3 |
| ------------- |
| Search box |
| ------------- |
| List item 1 |
| List item 2 |
| List item 3 |
---------------
hành vi dự kiến khi tôi tập trung vào hộp tìm kiếm:
_______________
| ------------- |
| 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
---------------
Điều gì thực sự xảy ra:
_______________
| 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
Đây là đoạn trích xView NavigationView của tôi (chỉ cần thiết lập thông thường của bạn):
<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 với tiêu đề tùy chỉnh ở đây (RecyclerView Adaptor):
@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);
}
}
Tiêu đề ngăn kéo chỉ là một bố cục xml tôi phồng lên trong hoạt động chính (Tôi phân công người nghe và hình ảnh động có) và truyền lại cho tôi Bộ điều hợp RecyclerView thông qua setHeaderView (Xem tiêu đề) Tôi đã thực hiện.
đã thử điều này? Đó là hiệu quả khác nhau cùng một kết quả. https://stackoverflow.com/questions/26568087/parallax-header-effect-with-recyclerview –
Đã thấy điều đó. Tiêu đề của tôi có các điều khiển trong nó (bao gồm cả bố cục có thể mở rộng) do đó hiệu ứng thị sai sẽ làm hỏng nó. Không phải đề cập đến việc sử dụng một thư viện cho nó sẽ là overkill như tôi đã thực hiện một tiêu đề tùy chỉnh trong RecyclerView của tôi thành công. Đó chỉ là vị trí cuộn là vấn đề – dmonloz
Hãy thử thay đổi chiều cao của chế độ xem tái chế thành 'wrap_content'. –