动态添加/删除项目菜单menuItem

时间:2015-08-05 07:28:30

标签: android

我遇到了问题,我想以编程方式在工具栏(素材设计)中添加项目。

这是我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        android:orderInCategory="100" android:showAsAction="never" />
</menu>

我知道更改文字,颜色,背景和@override监听器

toolbar.setBackgroundColor
toolbar.setTextColor
toolbar.setNavigationIcon
toolbar.setText

我不知道如何添加一个类别为“android:orderInCategory="300”的菜单ítem

感谢。

注意:我有所有片段,没有1个活动

Tree - > Activity - > Fragment1(here add menu item) - > Fragment2(add/remove menu item) - > Fragmentx ..

6 个答案:

答案 0 :(得分:4)

试试这个工具栏有选项getMenu()返回菜单

private static final String placeholder1="Something";
private static final int FIRST_ID=Menu.FIRST;
private static final int SECOND_ID=Menu.FIRST+1;


//To add an item
toolbar.getMenu().add(Menu.NONE,FIRST_ID,Menu.NONE,R.string.placeholder1);
toolbar.getMenu().add(Menu.NONE,SECOND_ID,Menu.NONE,R.string.placeholder2);

//and to remove a element just remove it with id
toolbar.getMenu().removeItem(FIRST_ID);

答案 1 :(得分:2)

首先将要显示/隐藏的项目放在xml文件中。 让我们说你的代码中提到的是“action_settings”,覆盖“onCreateOptionsMenu”

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.your_menu, menu);
    MenuItem item = menu.findItem(R.id.action_settings);
    if (yourConditionToShow) {
        item.setVisible(true);
    } else {
        item.setVisible(false);
    }
    return true;
}

答案 2 :(得分:2)

如果您无权访问工具栏,则可以执行以下操作:

1 - 通过onCreateOptionsMenu():

将项目添加到菜单中
public boolean onCreateOptionsMenu(Menu menu){

  super.onCreateOptionsMenu(menu);

  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.my_item_id, menu);

  return true;
}

2 - 如果项目必须可见,则创建一个等于true的布尔值

3 - 根据onPrepareOptionsMenu()中布尔值的值隐藏或显示项目

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

  MenuItem mi = menu.findItem(R.id.my_item_id);

  if(displayItem)
    mi.setVisible(true);
  else
    mi.setVisible(false);

  return super.onPrepareOptionsMenu(menu);
}

答案 3 :(得分:0)

在菜单XML文件中,您可以添加一个不可见的菜单项(android:visible = false),并在需要时渲染。

答案 4 :(得分:0)

onCreateOptionmenu 中,试试此代码

//menu.add("groupId", "ItemId", "OrderID", "title")
MenuItem item = menu.add(1, 100, 300, "Settings");
item.setIcon(R.drawable.ic_launcher);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

您还可以添加xml等设置。您可以通过 onOptionsItemSelected 中的itemid(&#34; 100&#34; )进行检查。

如果您不想将 100 用作ItemId,则可以创建 ids 资源文件。并且可以这样使用,

//R.id.action_settings is from ids resource file
MenuItem item = menu.add(1, R.id.action_settings, 300, "Settings");

答案 5 :(得分:0)

1解决方案:

@Chitrang感谢您的想法,我用这句话解决了:

toolbar.inflateMenu(R.menu.menu_activity1);
toolbar.inflateMenu(R.menu.menu_activity2);
toolbar.inflateMenu(R.menu.menu_activityx);

选项选择R.menu.item1,2,x

2解决方案: 创建自定义工具栏:进入&#34; android.support.v7.widget.Toolbar&#34;你可以管理所有的图标。

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"></LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Toolbar Title"
                android:layout_gravity="center"
                android:id="@+id/toolbar_title" />
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="right"
            android:layout_marginRight="15dp">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="24dp"
                android:id="@+id/imageView10"
                android:src="@drawable/sun"
                android:adjustViewBounds="true" />
        </LinearLayout>


    </LinearLayout>