如何在NavigationView的菜单项中设置省略号?

3
我希望在NavigationView的菜单项中设置android:ellipsize="end"。 在我当前的实现中,当菜单项中的文本太长时,它会被截断。以下是我迄今为止尝试过的方法:
<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>

编辑:

这里还有另一种可能的解决方案:Android NavigationView:不显示完整项目并且不截断

2个回答

11
styles.xml 中添加一个新样式:

res/values/styles.xml

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

将新的样式设置为NavigationView:

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" />

1
这个问题有两个部分——省略长名称和对于非常长的名称设置最大行数。如另一个答案所述,省略是很简单的。创建一个样式:
 <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来完成。尽管根据Material设计指南,非常长的菜单选项只允许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"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接