我遇到了问题,我想以编程方式在工具栏(素材设计)中添加项目。
这是我的菜单:
<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 ..
答案 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>