![](/img/trans.png)
[英]How to add MenuItem to Menu of a TrayIcon ,dynamically in java?
[英]How to add custom MenuItem dynamically in NavigationView?
我正在开发一个包含动态生成的菜单的应用程序:
private void cargarAvisosMenu()
{
// Menu
final Menu menu = this.mNavigationView.getMenu();
// Carga de datos
CentroSelection selection = new CentroSelection();
CentroCursor cur = selection.query(getApplicationContext().getContentResolver());
// Recorro el cursor de centros
while (cur.moveToNext()) {
boolean avisosTipoA = false;
boolean avisosTipoB = false;
Centro c = Centro.getFromCursor(cur);
if (c.getIsTipoAVisible() && c.getComponenteTipoA().getControlesTipoAPendientes() > 0) {
avisosTipoA = true;
}
if (c.getIsTipoBVisible() && c.getComponenteTipoB().getControlesTipoBPendientes() > 0){
avisosTipoB = true;
}
if (avisosTipoA || avisosTipoB) {
// Añado la sección y los items.
final SubMenu subMenu = menu.addSubMenu(c.getNombre());
if (avisosTipoA) {
subMenu.add("TipoA").setIcon(R.drawable.ic_tipoA);
}
if (avisosTipoB) {
subMenu.add("TipoB").setIcon(R.drawable.ic_tipoB);
}
}
}
}
我想向包含多个通知(如gmail)的MenuItem添加一个计数器。
根据这篇文章是可能的:
NavigationView提供了一种构建导航抽屉的便捷方法,包括使用菜单XML文件创建菜单项的能力。 通过使用app:actionLayout或使用MenuItemCompat.setActionView()为项目设置自定义视图的功能,我们扩展了可能的功能。
在开发动态菜单时,我尝试了第二个选项MenuItemCompat.setActionView()
:
private void cargarAvisosMenu()
{
// Menu
final Menu menu = this.mNavigationView.getMenu();
// Carga de datos
CentroSelection selection = new CentroSelection();
CentroCursor cur = selection.query(getApplicationContext().getContentResolver());
// Recorro el cursor de centros
while (cur.moveToNext()) {
boolean avisosTipoA = false;
boolean avisosTipoB = false;
Centro c = Centro.getFromCursor(cur);
if (c.getIsTipoAVisible() && c.getComponenteTipoA().getControlesTipoAPendientes() > 0) {
avisosTipoA = true;
}
if (c.getIsTipoBVisible() && c.getComponenteTipoB().getControlesTipoBPendientes() > 0){
avisosTipoB = true;
}
if (avisosTipoA || avisosTipoB) {
// Añado la sección y los items.
final SubMenu subMenu = menu.addSubMenu(c.getNombre());
if (avisosTipoA) {
subMenu.add("TipoA").setIcon(R.drawable.ic_tipoA);
}
if (avisosTipoB) {
// subMenu.add("TipoB").setIcon(R.drawable.ic_tipoB);
int itemId = subMenu.add("TipoB").getItemId();
View menuItem = MenuItemCompat.setActionView(subMenu.findItem(itemId), R.layout.menu_notificaciones).getActionView();
((ImageView) menuItem.findViewById(R.id.ivMenuNotificaciones)).setBackground(getDrawable(R.drawable.ic_barcode));
((TextView) menuItem.findViewById(R.id.tvMenuNotificaciones)).setText("TipoB");
((TextView) menuItem.findViewById(R.id.tvContadorNotificaciones)).setText("100");
}
}
}
}
“ menu_notificaciones.xml”:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivMenuNotificaciones"
android:layout_width="64dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tvMenuNotificaciones"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tvContadorNotificaciones"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"/>
</LinearLayout>
但这是行不通的。
更重要的是使用lib版本v7:23.1.1
使用编译'com.android.support:appcompat-v7:23.1.1'
菜单项
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single" android:id="@+id/root_group">
<item android:id="@+id/nav_switch"
app:actionLayout="@layout/action_view_switch"
android:title="Downloaded only" />
<item android:title="You" android:id="@+id/you_parent_item">
<menu android:id="@+id/you_menu">
<group android:checkableBehavior="single" android:id="@+id/you_group">
<item
android:id="@+id/item_you_summary"
android:title="Summary Detail" />
<item
android:id="@+id/item_calendar"
android:title="Calendar" />
</group>
</menu >
</item>
<item android:title="Your People" android:id="@+id/your_parent_item">
<menu android:id="@+id/your_menu">
<group android:checkableBehavior="single" android:id="@+id/your_group">
<item
android:id="@+id/your_item_sumary"
android:title="View Summary" />
<item
android:id="@+id/item_record_timeout"
android:title="Record TimeOut" />
</group>
</menu>
</item>
</group>
通过app:actionLayout的项目自定义视图
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.SwitchCompat
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:text="Switch"/>
我有同样的问题。 我解决了这个问题,我认为您需要在以下情况下替换“ AvisosTipoB”
您需要获取菜单项,稍后使用MenuItemCompat设置操作(setActionView),传递menuItem和布局(R.layout.menu_notificaciones)
。 声明布局并分配= (xxxxLayout) MenuItemCompat.getActionView(menuItem)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.