
在開發(fā)中經(jīng)常需要使用到標(biāo)題欄,很多時(shí)候我們會(huì)自自定義一個(gè)標(biāo)題欄,因?yàn)樽远x標(biāo)題欄基本上就只需要使用個(gè)RelativeLayout就能實(shí)現(xiàn)。但是很多時(shí)候我們自己定義的標(biāo)題欄,總是顯得不夠規(guī)范,或者不夠優(yōu)雅。
下面將介紹使用ToolBar一步步實(shí)現(xiàn)上面的效果圖:
- 添加一個(gè)布局activity_toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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="wrap_content"
android:background="?attr/colorPrimary"
android:id="@+id/toolBar"
/>
</LinearLayout>
- 初始化ToolBar:
toolbar=(Toolbar)findViewById(R.id.toolBar);
toolbar.setTitle("我的行程"); //設(shè)置標(biāo)題
toolbar.setSubtitle("SubTitle");// 設(shè)置子標(biāo)題
toolbar.setLogo(R.mipmap.ic_launcher); //設(shè)置Logo
運(yùn)行下看看效果

為啥我的行程是黑色的顏色呢?如果我想設(shè)置成自己的顏色又該怎么辦呢?
那就再來一張圖:

由此我們可以看到是textColorPrimary這個(gè)屬性決定我們的Title的顏色,下面在我們的styles.xml中進(jìn)行修改:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/colorWhite</item>
</style>
運(yùn)行:

- 添加導(dǎo)航按鈕:
setSupportActionBar(toolbar); //這里注意為固定寫法
toolbar.setNavigationIcon(R.mipmap.ic_arrow_back_white_24dp);//設(shè)置導(dǎo)航按鈕

- 添加右邊的圖標(biāo):
- 新建一個(gè)menu文件, res/menu/menu_tb.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item android:id="@+id/item_search"
android:title="搜索"
android:icon="@mipmap/ic_search_white_24dp"
app:showAsAction="ifRoom"/>
<item android:id="@+id/item_delete"
android:title="刪除"
android:icon="@mipmap/ic_delete_white_24dp"
app:showAsAction="ifRoom"/>
<item android:id="@+id/item_info"
android:title="信息"
android:icon="@mipmap/ic_info_white_24dp"
app:showAsAction="never"/>
<item android:id="@+id/item_settings"
android:title="設(shè)置"
android:icon="@mipmap/ic_build_white_24dp"
app:showAsAction="never"/>
</menu>
其中
android:title表示顯示menu的文本
android:icon表示顯示menu的圖標(biāo)
app:showAsAction表示顯示該item的策略,該屬性包含2個(gè)值 ifRoom/never
ifRoom表示如果空間足夠大就顯示,否則就隱藏
never表示不顯示,點(diǎn)擊3個(gè)點(diǎn)后才顯示出來
- 在Activity中重寫onCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_tb,menu);//將menu_tb加載到menu中去
return true;
}
再來看看效果圖:

為毛最右邊的3個(gè)點(diǎn)是黑色的呢?從上面設(shè)置標(biāo)題字體的顏色,我們是否大概知道需要去哪設(shè)置了呢?
沒錯(cuò),還是styles.xml中修改。
- 修改styles.xml中的android:textColorSecondary屬性:
<item name="android:textColorSecondary">@color/colorWhite</item>

變白了吧。
當(dāng)我們點(diǎn)擊3個(gè)點(diǎn)的時(shí)候,效果圖如下:

是不是覺得這個(gè)位置,以及背景顏色,字體顏色都不是很好看呢?
- 設(shè)置彈窗框樣式
在styles.xml中添加彈窗框樣式:
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="android:colorBackground">#87CEFA</item>
<item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item> <!--新增一個(gè)item,用于控制menu-->
</style>
<style name="OverflowMenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
<item name="overlapAnchor">false</item> <!--把該屬性改為false即可使menu位置位于toolbar之下-->
</style>
在toolbar的布局文件中添加
app:popupTheme="@style/ToolbarPopupTheme
運(yùn)行:

- 為菜單item添加點(diǎn)擊事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// do something...
return true;
}
});
- 為導(dǎo)航按鈕添加返回父Activity功能
- 在Manifest.xml中指定父Activity
<!-- android:parentActivityName 指定Navigation按鈕,返回的父Activity, 該屬性是在4.1中添加進(jìn)來的-->
<activity android:name=".ToolBarActivity"
android:parentActivityName=".MainActivity"
/>
<!-- 指定Navigation按鈕,返回的父Activity,為了兼容4.1以下的版本-->
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"
/>
- 在Activity的onCreate中設(shè)置ActionBar的導(dǎo)航欄按鈕允許返回父Acitivity
//獲取ActionBar
ActionBar bar=getSupportActionBar();
//允許返回指定的父Activity
bar.setDisplayHomeAsUpEnabled(true);
以上就是使用ToolBar的步驟