2017-11-14 3 views
0

Ich habe eine Navigationsansicht erstellt, in der eine dynamische Liste zur Laufzeit aus den vom Server abgerufenen Daten erstellt wird. Es funktioniert gut und zeigt die Liste an, sobald eine erfolgreiche Kommunikation mit dem Server stattgefunden hat. Das Problem ist, dass ich keine Elemente wie Einstellungen und Über uns am Ende der Liste hinzufügen kann. Das folgende Layout (activity_main.xml) führt in den Menüpunkten überschattend die Listenansicht Artikel:So verwenden Sie Menü und ListView gleichzeitig in einer Navigationsansicht

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:elevation="@dimen/padding" 
     app:menu="@menu/navigation_items" 

     > 

     <android.support.v7.widget.ListViewCompat 
      android:id="@+id/categories_list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:scrollbars="vertical" 
      android:layout_gravity="center" 
      android:layout_marginStart="@dimen/margin_side" 
      android:layout_marginLeft="@dimen/margin_side" 
      android:layout_marginTop="@dimen/nav_header_height" 
      android:layout_marginBottom="48dp" 
      /> 


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


</android.support.v4.widget.DrawerLayout> 

Und dies ist der Inhalt des navigation_items.xml (Menüressource):

<menu xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
<group android:id="@+id/nav_bottom" 
    android:orderInCategory="0"> 
    <item 
     android:id="@+id/settings" 
     android:icon="@drawable/settings" 
     android:title="@string/settings" /> 
    <item 
     android:id="@+id/about_us" 
     android:icon="@drawable/info" 
     android:title="@string/about_us" /> 


</group> 
</menu> 

Das Ergebnis auf Emulator wie folgt:
enter image description here

+0

können Sie keine Menüelemente in der Liste hinzufügen, anstatt "app: menu =" @ menu/navigation_items "'. Wie listview mit Standard-Elementen und wenn Sie neue Elemente haben, zeigen Sie sie mit listview – Raghunandan

+0

Können Sie bitte Ihren Java-Code posten. –

+0

@Raghunandan nein, ich muss die Liste im laufenden Betrieb erstellen. – JasonStack

Antwort

1

Die einfachste Art und Weise zu erreichen, was Sie wollen, ist

<com.example.raghu.drawersample.ScrimInsetsRelativeLayout 
    android:layout_width="320dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@android:color/white" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.NavigationView 
     android:layout_alignParentBottom="true" 
     android:id="@+id/nav_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:menu="@menu/activity_main_drawer" /> 

    <android.support.v7.widget.RecyclerView 
     android:layout_above="@+id/nav_view" 
     android:id="@+id/item_list" 
     android:layout_width="320dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:scrollbars="vertical" /> 

</com.example.raghu.drawersample.ScrimInsetsRelativeLayout> 

ViewGroup hat nicht setNavigationItemSelectedListener, wie kann dann anstelle von NavigationView verwendet werden? Wie integriere ich ein Menü in eine ViewGroup?

Sie wickeln einfach Ihre NavigationView und ListView/RecyclerView in einem RelativeLayout

Seine bis zu Ihnen, ob Sie RecyclerView oder Listview verwenden. Sie können normalerweise navigationView.setNavigationItemSelectedListener(this) verwenden.

Picked ScrimInsetsRelativeLayout Code von https://github.com/mikepenz/Materialize/blob/develop/library/src/main/java/com/mikepenz/materialize/view/ScrimInsetsRelativeLayout.java

ich diese Sache habe ich einen Header hinzugefügt recylerview und ich wollte bar den Status genau so aussehen wie im Bild unten.

Sie am Ende mit

enter image description here

Ich bin nicht sicher, ob „Einstellungen“ auf meiner Liste Ansicht anhängt eine gute Idee ist

Der andere Weg ist, um die Einstellungen hinzufügen Elemente als Fußzeile zu Ihrer Recycleransicht. Sie können dieses Muster in Google Mail sehen. Ich bin mir nicht sicher, warum es keine gute Idee ist. Wenn Sie mehr Elemente haben, müssen Sie nach unten scrollen.

Während der Fixierung der Fußzeile (Einstellungen & Hilfe) an der Unterseite mit Schatten an der Spitze ist, was Sie in der Inbox App sehen.

+0

Danke für die Antwort. Das Hinzufügen von ScrimInsetsRelativeLayout.java zu meinem Code führt zu mehreren nicht aufgelösten Abhängigkeiten. Wie kann ich das lösen? Und eine andere Frage, warum kann ein einfaches RelativeLayout nicht verwendet werden? – JasonStack

+0

@JasonStack können Sie relativeLayout verwenden. Ich wollte, dass die Kopfzeile auch die Statusleiste abdeckt. Also habe ich RelativeLayout benutzt. Für Ihren Fall ist es in Ordnung, nur RelativeLayout zu verwenden – Raghunandan

+0

@JasonStack funktioniert es ?? – Raghunandan

Verwandte Themen