我想在我的项目中使用android v7.toolbar和片段。所以我在我的主要活动xml中做了类似下面的事情。因为我不想将所有片段xml添加到<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:id="@+id/toolBar" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container">
</FrameLayout>
</LinearLayout>
{{1}}
我正在以编程方式添加片段。在某些片段中,我必须更改工具栏的右侧。例如,在某些片段中,我只需要使用1个右侧菜单图标和另一个片段2.我如何实现它?
还有办法从片段中更改工具栏右侧的图标资源吗?
谢谢,
答案 0 :(得分:2)
您可以创建menu.xml
并将所有菜单项放入其中。将所有项visibility
设置为false
。这隐藏了一切。
然后在您的片段onCreate
设置setHasOptionsMenu(true)
中,这将允许您覆盖onCreateOptionsMenu(Menu m, MenuInflater inflater)
。
在此方法中,您可以执行menu.findItem(id.of.item).setVisible(true/false)
。
示例:
menu.xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.sample.app.MainActivity">
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_action_refresh"
android:orderInCategory="101"
app:showAsAction="ifRoom"
android:title="@string/action_refresh"
android:visible="false"/>
<item
android:id="@+id/action_edit_account"
android:icon="@drawable/ic_action_edit"
android:orderInCategory="102"
app:showAsAction="never"
android:title="@string/action_edit_account"
android:visible="false"/>
<item
android:id="@+id/action_enable_offline_token"
android:orderInCategory="105"
app:showAsAction="never"
android:title="@string/action_enable_offline_token"
android:visible="false"/>
<item
android:id="@+id/action_disable_offline_token"
android:orderInCategory="105"
app:showAsAction="never"
android:title="@string/action_disable_offline_token"
android:visible="false"/>
<item
android:id="@+id/action_save"
android:icon="@drawable/ic_action_save"
android:orderInCategory="106"
app:showAsAction="ifRoom"
android:title="@string/action_save"
android:visible="false"/>
</menu>
片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
menu.findItem(R.id.action_refresh).setVisible(false);
menu.findItem(R.id.action_save).setVisible(true);
}
要更改图标,您只需获取菜单并执行findItem和setIcon。