我在NavigationView中使用自定義第一項作爲與ListView的addHeaderView()等效的RecyclerView。在該頁眉佈局的底部,我放置了一個EditText,以便我可以過濾掉下面的列表。如何強制RecyclerView滾動時沒有足夠的項目來填充sceen的高度
我想要做的就是一直向上滾動RecyclerView,直到EditText獲得焦點時EditText成爲最頂端的項目。但是,如果我的項目數量足夠小,無法填充NavigationView的整個高度,則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
這裏是我的NavigationView 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>
與自定義標題這裏(RecyclerView適配器)ViewHolder:
@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(查看標題)我做的。
試過嗎?這是不同的效果相同的結果。 https://stackoverflow.com/questions/26568087/parallax-header-effect-with-recyclerview –
看到了。我的頭部有控件(包括可擴展的佈局),所以視差效果會毀掉它。更不用說爲它使用一個庫會是矯枉過正,因爲我已經成功地在RecyclerView中實現了自定義標頭。只有滾動位置是問題 – dmonloz
嘗試將回收站視圖的高度更改爲'wrap_content'。 –