2016-03-22 3 views
1

Я хочу установить android: ellipsize = "end" в пунктах меню NavigationView. В моей текущей реализации, когда текст в элементе меню слишком длинный, он просто разрезан в конце. Вот то, что я пытался до сих пор:Как установить эллипсис в пункт меню NavigationView?

<android.support.design.widget.NavigationView 
     app:itemTextAppearance="@style/AppTheme.Widget.NavigationView.TextAppearance" 
     android:id="@+id/navigation" 
     style="@style/AppTheme.Widget.NavigationView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:menu="@menu/drawer_view"/> 

<style name="AppTheme.Widget.NavigationView" parent="Widget.Design.NavigationView"> 
     <item name="android:textAppearance">@style/AppTheme.Widget.NavigationView.TextAppearance</item> 
     <item name="android:background">@color/drawer_background</item> 
     <item name="itemTextColor">@color/color_drawer_item</item> 
     <item name="itemIconTint">@color/color_drawer_item</item> 
</style> 

<style name="AppTheme.Widget.NavigationView.TextAppearance"> 
     <item name="android:ellipsize">end</item> 
     <item name="android:maxLines">1</item> 
</style> 

Edit:

Другое возможное решение описано здесь: Android NavigationView : not show full item and not truncate

ответ

2

Добавить новый стиль в styles.xml:

res/values ​​/ styles.xml

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

Установите новый стиль в NavigationView:

Рез/макет/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

Есть 2 части на эти вопросы - ellipsize длинные имена и MaxLines для очень длинных имен , Как уже упоминалось в другом ответе, эллипсис прост. Создание стиля:

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

Добавить этот стиль вашего NavigationView:

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/nav_drawer_header" 
    app:menu="@menu/menu_nav_drawer" 
    app:itemTextColor="@color/textColorPrimary" 
    app:theme="@style/NavigationMenuItemTextAppearance"> 
</android.support.design.widget.NavigationView> 

Чтобы задать количество строк, которые бы дать имя, чтобы показать, что может быть сделано более-едущего файл макета: design_navigation_menu_item.xml. Несмотря на то, что в соответствии с рекомендациями по материальному дизайну допускается только 1 линия для очень длинного опциона меню material design navigation drawer

Просто скопируйте библиотеку поддержки в свой собственный файл design_navigation_menu_item.xml и поместите ее в папку макета. Изменение maxLines = "2"

<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:maxLines="2" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body2"/> 
Смежные вопросы