如何为Material Design抽屉NavigationView上的项目添加通知值?

21
我的问题非常简单,如何在 NavigationView 上的项目右边添加通知值,就像Material Design 抽屉中那样?有没有定义抽屉菜单项的属性?
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group
        android:checkableBehavior="single">

        <item
            android:id="@+id/drawer_home"
            android:checked="true"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/home"/>

        <item
            android:id="@+id/drawer_favourite"
            android:icon="@drawable/ic_favorite_black_24dp"
            android:title="@string/favourite"/>
        ...

        <item
            android:id="@+id/drawer_settings"
            android:icon="@drawable/ic_settings_black_24dp"
            android:title="@string/settings"/>

    </group>
</menu>

1
你需要在NavigationView中创建自己的listview,因为NavigationView不允许太多的灵活性。 - Moinkhan
1
@Moinkhan,我的问题正是View导航组件是否具有至少这种灵活性。良好的实践是使用此组件进行增长,因此... - lopez.mikhael
1
哦,是的...也许他们在未来的版本中改进了导航视图。 - Moinkhan
感谢您的回复 @Luksprog。但是,使用RecyclerView或其他ListView非常容易实现。但我的想法是真正地利用Android Material Design中的新闻组件..我真的希望他们在下一个版本中能够改进。 - lopez.mikhael
您可以查看此答案以获取类似问题的解决方案:https://dev59.com/d10a5IYBdhLWcg3wPGiQ#33607630 - Alex Vasilkov
显示剩余5条评论
5个回答

15

使用AppCompat-V7版本23中的NavigationView和操作视图是可能的。 1. 为计数器创建一个布局,例如nav_drawer_counter.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:textColor="@color/colorPrimary"/>
  1. menu/nav_drawer.xml文件中的每个你想要显示计数器数值的项目中,添加对它的引用(确保使用app命名空间):

<item 
    ...
    app:actionLayout="@layout/activity_main_nav_drawer_menu_counter"
    />
  • 添加一个设置 TextView 值的方法,例如:

  • @Override
    protected void onCreate(Bundle savedInstanceState) {
    ....
    setNavItemCount(R.id.nav_notifications, 10);
    }
    
    
    private void setNavItemCount(@IdRes int itemId, int count) {
    TextView view = (TextView) navigationView.getMenu().findItem(itemId).getActionView();
    view.setText(count > 0 ? String.valueOf(count) : null);
    }
    

    5

    哦,是的... 您可以更改计数器的值。

    从您提供的图像中看来,您正在使用Rudson Lima的Material Design导航抽屉

    在其库中,类NavigationLiveo中有一个函数public void setNewCounterValue(int drawerItemPosition, int counterValue);

    希望您会正确使用其对象来调用此函数。

    祝你好运... :-)


    你在这个问题上给出了迄今为止最好的答案,我会授予你赏金。然而,我认为现在如果不使用库,这是不可能的... 我希望Google能够更新其NavigationView组件以使其本地化。 - lopez.mikhael
    谢谢...你说得对,NavigationView支持库中仍然没有这个功能。希望Google能尽快提供给大家。 - Azim Ansari

    1

    0

    经过一些研究,我发现实际上没有真正的方法将通知添加到抽屉中。然而,在开发者文档中创建导航抽屉教程中展示的示例演示了如何在每次打开时强制重新绘制(以及如何使用菜单XML表格实现它)。它没有详细介绍如何添加通知,但有其他来源可以提供帮助。

    这个教程是另一个“如何制作导航抽屉”的教程,其中包含有关如何适应通知按钮的ListView适配器的确切细节。我认为这很可能是您要寻找的内容。

    祝你好运!希望能对你有所帮助。


    0

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