2015-11-22 9 views
17

Ich möchte eine Fragment mit einer RecyclerView erstellen, die nach oben zeigt und weitere Elemente beim Hochschieben anzeigt.Slide RecyclerSchieben Sie den Bildschirm nach oben, während Sie nach oben wischen, oder schieben Sie die Recycleransicht nach unten, während Sie nach unten wischen

Hier ist ein Beispiel von dem, worüber ich spreche.

Initial Creation:

enter image description here

Benutzer Swipes Up RecyclerView bis zu rutschen, mehr Einzelteile zeigt:

enter image description here

Es gibt ein paar Probleme, würde Ich mag keine CoordinatorLayout zu verwenden, und ich möchte es auf wo das Element festlegen s in der RecyclerView stapeln direkt auf der Oberseite der EditText.

Dies ist der Layout-Code verwende ich:

<android.support.design.widget.CoordinatorLayout 
android:id="@+id/coordinatorLayout" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:visibility="visible"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBarLayout" 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
    android:background="@android:color/transparent" 
    android:fitsSystemWindows="true" 
    android:orientation="vertical"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsingToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/transparent" 
     android:fitsSystemWindows="true" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <View 
      android:id="@+id/emptyView" 
      android:layout_width="match_parent" 
      android:layout_height="400dp" 
      android:background="@android:color/transparent" 
      app:layout_collapseMode="parallax"/> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

     <EditText 
      android:id="@+id/editText" 
      android:paddingLeft="16dp" 
      android:inputType="textAutoCorrect" 
      android:layout_centerVertical="true" 
      android:background="@android:color/transparent" 
      android:layout_width="match_parent" 
      android:layout_height="56dp"/> 

    </RelativeLayout> 

</RelativeLayout> 

Und ich bekomme etwas wie folgt aus:

enter image description here

Dies ist definitiv nicht skalierbar und leeren Blick würde muss konsequent gemessen werden.

+1

Gibt es einen Grund, warum Sie Möchten Sie keine CoordinateLayout-Implementierung? – Ari

Antwort

11

Ich löste dies durch Verwendung eines benutzerdefinierten TouchListener alle anderen Lösungen waren sehr einfach und beschränkt sich auf eine spezifische und Boxed Use-Case.

So wie ich dies tat, war eine neue TouchListener aus dieser Bibliothek basiert implementieren:

BounceTouchListener

ich die folgenden Ergebnisse erhalten:

enter image description here

+0

Danke @AndyRoid für BounceTouchListener –

4

Verwendung RecyclerView mit 2 Typen von Zeilen:

  1. leere Zeile/Zeilen grau gefärbt (ohne divider)
  2. Zeilen mit Inhalt, wie Sie bereits

Die RecyclerView haben müssen, um match_parent zu dem gesamten Fragment

So erhalten Sie den richtigen Effekt eines "leeren" Bereich auf der RecyclerView.

enter image description here

+0

Dies wäre eine Lösung, die ich von Kopf bis Fuß gehen würde, und ich habe darüber nachgedacht, aber es gibt ein paar wichtige Probleme, Sie können den gesamten 'RecyclerView' nach oben schieben, damit er nicht an den Elementen vorbei gleitet. Also ich möchte im Grunde etwas wie Bild 3 verhindern – AndyRoid

+0

@AndyRoid Ich habe nicht verstanden, was ist Ihr Problem mit dieser Option? Kannst du es mit mehr Details erklären? – David

+0

In iOS-Land können Sie ein zusätzliches contentInset am oberen oder unteren Rand einer Tabellenansicht festlegen, wodurch ein zusätzlicher Bildlaufbereich entsteht. Gibt es etwas Ähnliches in Android? Ich möchte das Live über den Editiertext stellen und dann unter dem RecyclerView ein zusätzliches ContentInset geben, so dass man nur ein wenig unterhalb der Tastatur scrollen kann. – AndyRoid

0

Sie können setReverseLayout von LinearLayoutManager verwenden

Gebrauchte Artikel Traversal und Layout, um umzukehren. Dies verhält sich ähnlich wie zu der Layoutänderung für RTL-Ansichten. Wenn der Wert auf "true" gesetzt ist, wird der erste Artikel am Ende der Benutzeroberfläche auf gelegt, der zweite Artikel wird davor angeordnet usw. Bei horizontalen Layouts hängt dies von der Layoutrichtung ab. Wenn auf True gesetzt ist, wenn RecyclerView LTR ist, dann wird es Layout von RTL, wenn RecyclerView} RTL ist, wird es Layout von LTR.Wenn Sie genau das gleiche Verhalten von setStackFromBottom (boolean) suchen, verwenden Sie setStackFromEnd (boolean)