2015-05-31 15 views
9

Ich versuche, eine CoordinatorLayout von der neu Android Design Support Library angekündigt zu implementieren, und ich habe den folgenden Code in meinem XML-Layout gemäß der Probe here verwendet:CoordinatorLayout arbeiten nicht

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

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

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

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

jedoch die Aktionsleiste verbirgt sich nicht, wenn ich die Ansicht nach unten scrolle. Ich kann nicht herausfinden, warum das nicht funktioniert.

Edit: Soweit ich weiß, es scheint, dass CoordinatorLayout nicht mit ListView/GridView/ScrollViews funktioniert und funktioniert nur mit RecyclerView und NestedScrollView. Leider ist der Wechsel zu einer dieser Ansichten für mich keine Möglichkeit, daher suche ich immer noch nach einer Lösung.

+0

Sie können das Listview/Gridview und CoordinatorLayout mit API21 +. –

Antwort

4

Ich glaube, Sie brauchen, um ListView beide ScrollingView und NestedScrollingChild Schnittstellen implementieren.

Es ist nicht die einfachste Sache, aber Sie sollten es tun können, wenn Sie RecyclerView 's Quellcode betrachten. Es verwendet eine NestedScrollingChildHelper und Sie sollten in der Lage sein, das gleiche zu tun.

+2

Es ist nicht ausreichend, die NestedScrollingChild-Schnittstelle in Ihrem ListView zu implementieren. Check: http://stackoverflow.com/questions/30696611/design-lib-coordinatorlayout-collapsingtoolbarlayout-with-gridview-listview/30885092#30885092 –

0

Es hängt davon ab, was Sie in Ihrer ViewPager zeigen. Wenn Sie eine Listen-/Recycler-Ansicht verwenden, sollte sie korrekt durchlaufen werden.

+0

Ich verwende mehrere Ansichten innerhalb des ViewPagers, von denen einer ein ListView ist. Ich habe versucht, nur einen ListView ohne Unterschied zu verwenden. – dnlbaines

+0

Ich würde es mit einem 'RecyclerView' versuchen und die neueste Support-Bibliothek verwenden:' compile 'com.android.support: recyclerview-v7: 22.2.0''.Das Fragment sollte nur die Recycleransicht haben, nicht in ein anderes Layout einfügen. – aows

+0

Meine App eine Liste von Artikeln in einem Listview wird geladen, verwendet aber zwei andere Ansichten, man einen Fortschritt Spinner und anderen zu zeigen, einen Text zu zeigen, wenn keine Artikel geladen werden - wie kann ich dies nur ein RecyclerView mit dem tun? – dnlbaines

0

Ansichten können mithilfe der CoordinatorLayout.DefaultBehavior (YourView.Behavior.class) Anmerkung, oder legen Sie sie in Ihrem Layout-Dateien, indem sie mit der App ein Standardverhalten erklären: layout_behavior = "com.example.app.YourView $ Verhalten "Attribut. Dieses Framework ermöglicht die Integration aller Ansichten in CoordinatorLayout.

Also ich denke Lösung hier außer Kraft gesetzt ist die AppBarLayout.Behavior Klasse

5

Momentan haben nicht alle Ansichten das erwartete Verhalten mit der CoordinatorLayout.

Ihre Ansichten sollten die Schnittstelle NestedScrollView implementieren und die verschachtelten Bildlaufereignisse verarbeiten.

Die RecyclerView und die NestedScrollView (Version 22) unterstützen dieses Verhalten. Sie können jedoch auch die AbsListView (ListView und GridView) aber nur mit API21 + verwenden.

Genau so etwas wie hinzufügen:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    listView.setNestedScrollingEnabled(true); 
} 
+1

Vielen Dank! Du hast meinen Tag gerettet. –

Verwandte Themen