有一個需求,主界面是一個Activity,里面是ViewPager+Fragment。當滑到不同頁時,上面的 Toolbar需要跟著改變。
本篇主要介紹,如何讓Fragment修改在Activity中的Toolbar,以及讓Toolbar的menu上的圖標顯示出來。
(1)讓Fragment支持,并修改Toolbar。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//這里設(shè)置另外的menu
menu.clear();
inflater.inflate(R.menu.notes, menu);
super.onCreateOptionsMenu(menu, inflater);
}
(2)讓Toolbar的menu顯示圖標。
讓Toolbar顯示menu圖標,只需要改一下onCreateOptionsMenu()方法。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//這里設(shè)置另外的menu
menu.clear();
inflater.inflate(R.menu.notes, menu);
//通過反射讓menu的圖標可見
if (menu != null) {
if (menu.getClass() == MenuBuilder.class) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
//這一行不能忘,否則看不到圖標
//拿到ActionBar后,可以進行設(shè)置
((AppCompatActivity) getActivity()).getSupportActionBar();
super.onCreateOptionsMenu(menu, inflater);
}
如果想讓menu菜單,在Toolbar的下方彈出,可以給Toolbar設(shè)置Style。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ToolbarPopupTheme"
app:theme="@style/Widget.AppCompat.Light.ActionBar"/>
<style name="ToolbarPopupTheme" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
<item name="android:colorBackground">#90000000</item> <!-- 設(shè)置背景顏色-->
<item name="overlapAnchor">false</item> <!--設(shè)置不覆蓋錨點-->
</style>