我试着像这样做:
要获得此结果,我使用以下代码:
我有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");
}
最终我什么都没得到。
我试过调试,它告诉我一切都好。
请帮帮我。我做错了什么?
答案 0 :(得分:0)
最简单的选择是将自定义布局的片段作为DrawerLayout的第二个子节点而不是NavigationView。它基本上看起来和工作类似于NavigationView,但它可以为您提供更多的自定义。
关注此方法的Slidenerd教程。观看所有视频以获得全面了解:):
https://www.youtube.com/watch?v=zWpEh9k8i7Q
如果您仍想坚持使用NavigationView,请查看重复问题,这基本上就是您所要求的。它提供了另一种方法。
答案 1 :(得分:0)
尝试使用类似的东西。
TextView tv = (TextView) navigationView.getMenu().findItem(R.id.nav_inbox).getActionView().findViewById((R.id.textMenuItemCount);
答案 2 :(得分:0)
在onCreate
中找不到和操纵视图,onCreate
之前调用onCreateView
。相反,您应该在布局正确充气后调用来自onResume
的所有视图。或者,您可以先将视图设置为onCreate
。