2015-09-18 6 views
16

Ich schreibe eine einfache App, um mit ContentProvider zu spielen, ich habe eine db, einen ContentProvider, eine Hauptaktivität, eine Klasse, die Befehle an den ContentProvider mit ContentResolver weiterleitet. Auf der GUI möchte ich nur alle Elemente anzeigen, die in der Datenbank gespeichert sind. Ich habe dieses Projekt von Grund auf neu erstellt und beim Erstellen der Aktivität hatte das Hauptlayout ein CoordinatorLayout mit einem AppBarLayout, und das ist gut, ich habe ein ListView erstellt und alles funktioniert, außer dass das AppBarLayout das ListView unterhalb des ersten Elements der Listview überlappt versteckt sich beim AppBarLayout. enter image description hereAndroid AppBarLayout überlappt Listenansicht

Ich versuchte android:layout_below für meine Listview zu verwenden, aber es funktioniert nicht, wenn ich android:layout_marginTop verwenden dann meine Listview unter dem AppBarLayout ist, aber ich diese Lösung nicht schön finden.

Gibt es keine saubere einfache Möglichkeit, ListView unter dem AppBarLayout zu haben?

unter meinem activity_main Layout:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/holo_light_background" 
    android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/AppTheme.AppBarOverlay" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 
    </android.support.design.widget.AppBarLayout> 


    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/bar"/> 


    <android.support.design.widget.FloatingActionButton ...> 

    <android.support.design.widget.FloatingActionButton ...> 

</android.support.design.widget.CoordinatorLayout> 
+1

Sie zeigen nicht genug von Ihrem XML, teilen Sie die gesamte Layout-Datei. – Booger

+3

Auch sollten Sie nicht mehr als 1 FAB haben !!! – Booger

+1

@Booger eigentlich ist es das ganze XML. Die letzte Zeile fehlte, ich habe sie hinzugefügt und ich gebe nicht die ganze Floatingbuttom Definition. In Bezug auf die Verwendung von 2 schwebenden Schaltflächen, denke ich, hast du recht, google empfiehlt nur einen schwebenden Button, aber sie verwenden manchmal 2 schwebende Buttons [https://www.google.com/design/spec/components/buttons-floating-action- button.html # buttons-floating-action-button-übergänge], es ist nicht wirklich klar für mich –

Antwort

34

Einfach hinzufügen

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

zu Ihrem Listview

+1

Sie haben Recht, wenn Sie gemeint haben, dass ich 'layout_behavior' zu ListView hinzufügen muss;) –

+1

@OLeeCsobert Wenn es funktioniert, wird es nur auf Lollipop und höher funktionieren. Bis zu diesem Punkt gab es keine geschachtelte Scroll-Unterstützung, die verwendet wird, um das gewünschte Verhalten zu erreichen. Ich schlage vor, dass Sie zu RecyclerView wechseln, da diese Funktion über die Support-Bibliothek verfügbar ist. –

+0

@Eugen Pechanec, danke für deinen Kommentar, das ist eigentlich eine Frage die ich mir gestellt habe: Sollten wir ListView komplett auf nur RecyclerView verzichten? –

0

eine alternative Art und Weise RecyclerView statt Listview zu verwenden ist, wird es sicher arbeiten ........

OR

Verwendung:

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

Es wird offensichtlich nur auf Lollipop arbeiten.