Android 如何为物料设计抽屉的NavigationView上的项目添加通知值?

Android 如何为物料设计抽屉的NavigationView上的项目添加通知值?,android,navigation-drawer,material-design,navigationview,Android,Navigation Drawer,Material Design,Navigationview,我的问题很简单,如何为这样的项目添加通知值 菜单项中是否有用于定义抽屉的属性 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/drawer_home" andr

我的问题很简单,如何为这样的项目添加通知值

菜单项中是否有用于定义抽屉的属性

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

...

通过一些研究,我发现,不,没有真正的方法将通知添加到抽屉中。然而,开发人员教程中的示例演示了如何在每次打开时强制重画(以及如何使用菜单XML工作表实现它)。它没有详细介绍如何添加通知,但还有其他来源

这是另一个“如何制作导航抽屉”教程,其中包含了关于如何调整ListView适配器以适应通知按钮的确切细节。我想这很可能就是你想要的


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

你可以用图书馆来做这个。尝试或

您应该确切地检查它是如何在原始项目的github上完成的:


基本上,您可以为ListView的行创建一个自定义视图,并相应地更新它们。

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

从您提供的图像来看,您使用的是实时的

在其库中有一个函数
public void setNewCounterValue(int-drawerItemPosition,int-counterValue)导航liveo

希望您能正确使用它的对象来调用此函数


祝你好运…:-)

这可以通过使用动作视图的AppCompat-V7版本23中的导航视图实现。 1.为计数器创建布局,例如
nav\u drawer\u 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"/>
  • 添加一种方法来设置
    文本视图的值,例如:

    @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);
    }
    

  • 为此,您必须在导航视图中创建自己的
    listview
    。因为
    NavigationView
    不允许有太大的灵活性。@Moinkhan我的问题是视图导航组件是否至少具有这种灵活性。好的做法是使用这个组件,所以…@Moinkhan另外,ListView现在被RecyclerView取代了。哦,是的。。在未来的版本中,它们可能是改进的导航视图。您可以使用ListView或recycler视图来扩展自定义行布局,并隐藏每行的通知计数视图。在getView()或onBindViewHolder()中,您可以设置计数并使计数视图可见您对这个问题有迄今为止最好的答案,我给你这样的赏金。然而,我认为现在不使用图书馆是不可能的。。。我希望谷歌将更新其导航视图组件,使其能够在本机上运行。谢谢。。。您是对的,它在NavigationView支持库中仍然不可用。希望谷歌能尽快将它推广给所有人。
    @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);
    }