NavigationView内でカスタム最初のアイテムを持つRecyclerViewをListViewのaddHeaderView()と同等のものとして作成しました。そのヘッダーレイアウトの下部に、私はEditTextを配置して、以下のリストを除外することができました。sceenの高さを埋めるのに十分なアイテムがないときにRecyclerViewをスクロールさせる方法
私がやりたかったことは、EditTextがフォーカスを得るたびにEditTextが一番上の項目になるまでRecyclerViewをスクロールすることでした。しかし、アイテム数がNavigationViewの高さ全体を埋めることができないほど小さい場合、RecyclerViewは全部スクロールしてEditText以外のヘッダーを少しだけ表示することを拒否します。追加された問題として、リストが十分な大きさであっても、リスト項目のフィルタリングを開始すると、それでもスクロールバックされます。
ヘッダーの残りの部分でピークが表示されないように、ビューの高さを塗りつぶすのに十分なアイテムがない場合でも、RecyclerViewをさらにスクロールさせるにはどうすればよいですか?ここで
は私が達成しようとしているものの可視化です:
私は検索ボックスに焦点を当てたときの挙動を期待_______________
| HEADER LINE 1 |
| HEADER LINE 2 |
| HEADER LINE 3 |
| ------------- |
| Search box |
| ------------- |
| List item 1 |
| List item 2 |
| List item 3 |
---------------
:
_______________
| 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
:実際に何が起こる
_______________
| ------------- |
| 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
---------------
私の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'に変更してみてください。 –