yüksekliğini doldurmak için yeterli öğe olmadığında kaydırma yapmak için RecyclerView nasıl zorlanır Bir NavigationView içinde özel bir ilk öğeyi ListView'ın addHeaderView(). Bu başlık düzeninin alt kısmında, aşağıdaki listeyi filtrelemek için bir EditText yerleştirdim.Sceen
Yapmak istediğim, EditText odağı her kazanıldığında EditText en üstteki öğe olana kadar RecyclerView öğesinin sonuna kadar kaydırmaktı. Bununla birlikte, öğe sayımın NavigationView'ın tüm yüksekliğini dolduramayacak kadar küçük olması durumunda, RecyclerView, tüm yolu yukarı kaydırmayı ve böylece EditText dışındaki başlıkların biraz daha fazlasını göstermeyi reddeder. Ek bir sorun olarak, liste yeterince büyük olsa bile, liste öğelerini filtrelemeye başladığımda yine de arka arkaya kayar.
Görüşümün yüksekliğini doldurmak için yeterli öğeye sahip olmasam bile, Başlığımın geri kalanı bir göz atmayacak şekilde bile olsa, RecyclerView'ımı tamamen yukarı kaydırmaya nasıl zorlayabilirim? İşte
elde etmek çalışıyorum şeyin bir görselleştirme bulunuyor:_______________
| HEADER LINE 1 |
| HEADER LINE 2 |
| HEADER LINE 3 |
| ------------- |
| Search box |
| ------------- |
| List item 1 |
| List item 2 |
| List item 3 |
---------------
Arama kutusuna odaklanmak Beklenen davranış:
_______________
| ------------- |
| 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
---------------
aslında ne olur:
_______________
| 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
Benim NavigationView xml'imin bir pasajı (sadece tipik kurulumunuz):
01 Burada özel bir başlıkta (RecyclerView Adaptör) ile<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:
@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);
}
}
çekmece başlığı (Ben orada dinleyicileri ve animasyonlar atanan) ve aktarılmasını ana aktivitede şişirilmiş sadece xml düzenini benim setHeaderView (View header) üzerinden RecyclerView adaptörü yaptım.
bunu denedi? Bu farklı etki aynı sonuçtur. https://stackoverflow.com/questions/26568087/parallax-header-effect-with-recyclerview –
Bunu zaten gördüm. Başlığımın içinde kontrolleri var (genişletilebilir bir düzen dahil), böylece paralaks etkisi onu mahveder. Bunun için bir kütüphane kullanmaktan söz etmemekle birlikte, RecyclerView'imde başarıyla bir özel başlık daha gerçekleştirdiğim için fazladan olacaktır. Sorun sadece kaydırma pozisyonuydu. – dmonloz
Geri dönüşümcü görünümünün yüksekliğini "wrap_content" olarak değiştirmeyi deneyin. –