为什么不出现徽章?

时间:2016-07-11 10:30:22

标签: java android xml navigation-drawer

我试着像这样做:

введите сюда описание изображения

要获得此结果,我使用以下代码:

我有NavigationView

<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_second"
    app:menu="@menu/activity_third_drawer" />

我有菜单XML文件:

<?xml version="1.0" encoding="utf-8"?>

<group android:checkableBehavior="single">

    <item
        android:id="@+id/nav_inbox"
        android:icon="@drawable/ic_mail_outline_white"
        android:title="Inbox"
        app:actionLayout="@layout/badge" />
</group>

<item android:title="@string/about_app">
    <menu>
        <item
            android:id="@+id/nav_about"
            android:icon="@drawable/ic_close_24dp"
            android:title="@string/about1" />
    </menu>
</item>
</menu>

我有badge XML个文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/textMenuItemCount"
    android:layout_width="wrap_content"
    android:text="rrrr"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:textColor="@android:color/holo_blue_light"
    android:textStyle="bold"
    android:textSize="16sp"
    android:alpha="0.6"/>
</RelativeLayout>

然后我尝试将2设置为badge中的MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mainsecond);

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    MenuItem item = navigationView.getMenu().findItem(R.id.nav_inbox);
    MenuItemCompat.setActionView(item, R.layout.badge);
    RelativeLayout notifCount = (RelativeLayout) MenuItemCompat.getActionView(item);
    TextView tv = (TextView) notifCount.findViewById(R.id.textMenuItemCount);
    tv.setText("2");
}

最终我什么都没得到。

enter image description here

我试过调试,它告诉我一切都好。

enter image description here

请帮帮我。我做错了什么?

3 个答案:

答案 0 :(得分:0)

最简单的选择是将自定义布局的片段作为DrawerLayout的第二个子节点而不是NavigationView。它基本上看起来和工作类似于NavigationView,但它可以为您提供更多的自定义。

关注此方法的Slidenerd教程。观看所有视频以获得全面了解:):

https://www.youtube.com/watch?v=zWpEh9k8i7Q

如果您仍想坚持使用NavigationView,请查看重复问题,这基本上就是您所要求的。它提供了另一种方法。

How to create a custom navigation drawer in android

答案 1 :(得分:0)

尝试使用类似的东西。

  TextView tv = (TextView) navigationView.getMenu().findItem(R.id.nav_inbox).getActionView().findViewById((R.id.textMenuItemCount);

答案 2 :(得分:0)

onCreate中找不到和操纵视图,onCreate之前调用onCreateView。相反,您应该在布局正确充气后调用来自onResume的所有视图。或者,您可以先将视图设置为onCreate