2016-04-19 13 views
4

Ich habe eine App mit einer Navigationsansicht für meine DrawerLayout. Ich füge programmatische Elemente in das Menü ein, weil ich die Informationen über das Netzwerk erhalte. Aber manchmal kann ein Produktname sehr lang sein und wird gerade mit dem Ellipsensymbol "..." abgeschnitten.Navigation View Multiline Text

Hat jemand eine Idee, wie man multiline für meine Menüeinzelteile hat?

Dank

Antwort

0

Schauen Sie sich diese answer. Das Standardmenü für Android-Diashows ist nicht sehr flexibel. Wahrscheinlich müssen Sie Ihre benutzerdefinierte Ansicht erstellen.
Ich wirklich this Tutorial von AndroidHive.

8

Aufschalten design_navigation_menu_item.xml aus dem Android-Support Design Bibliothek und ändern Sie die Dinge, die Sie benötigen (Set android:ellipsize="end" und android:maxLines="2")

Ihre res/layout/design_navigation_menu_item.xml sollte wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckedTextView 
     android:id="@+id/design_menu_item_text" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:drawablePadding="@dimen/design_navigation_icon_padding" 
     android:gravity="center_vertical|start" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body2" 
     android:ellipsize="end" 
     android:maxLines="2" /> 
    <ViewStub 
     android:id="@+id/design_menu_item_action_area_stub" 
     android:inflatedId="@+id/design_menu_item_action_area" 
     android:layout="@layout/design_menu_item_action_area" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" /> 
</merge> 

Jedoch, sollten Sie einfach den Text in Ellipse, um die Material Design-Richtlinien ordnungsgemäß zu befolgen.

Sie haben nichts zu überschreiben Sie einfach den Text ellipsize:

  • Fügen Sie einen neuen Stil in die styles.xml
  • den neuen Stil in die NavigationView Set

res/values ​​/ styles.xml

<style name="TextAppearance"> 
    <item name="android:ellipsize">end</item> 
</style> 

res/layout/activity_main.xml

<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:menu="@menu/activity_main_drawer" 
    app:theme="@style/TextAppearance" /> 
+0

Danke, es funktioniert. –

0

Ich hatte das gleiche Problem, und ich versucht und versucht, keine Fortschritte gibt mit Menu war, habe ich es unmöglich war, nicht sagen, aber ich konnte nicht finden Sie einen Weg, MenuItem Zeilen zu brechen.

Aber wenn Sie nicht auf beharren Menu mit Ich schlage vor, Sie so ein ListView oder RecyclerView in Ihrem Layout zu verwenden:

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/nav_draw_header"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv" 
     android:layout_marginTop="160dp" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

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

Wie man dort sehen kann keine besondere Sache ist, kein Menü zu erklären , nur ein RecyclerView, layout_marginTop Wert ist das gleiche wie Kopfhöhe, ich bin sicher, dass Sie den Rest der Geschichte kennen (Wie Sie RecyclerView auslösen), Dieser Ansatz gibt mehr Flexibilität zu NavigationView Menüpunkte (tatsächlich RecyclerView Artikel). Wenn meine Antwort nicht klar genug ist, lassen Sie es mich wissen.Hier

ist das Ergebnis:

enter image description here

Verwandte Themen