Toolbar 引入使用
xml布局中加入
<color name="weixin_bg">#434343</color>
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@color/weixin_bg"
android:theme="@style/AppTheme.ToolBar"
app:title="@string/app_name"/>
主題改為隱藏ActionBar:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/weixin_bg</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Activity代碼中加入:
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ToolBar 樣式:
<style name="AppTheme.ToolBar" parent="AppTheme">
<!--ToolBar 字體顏色改為白色 -->
<item name="titleTextColor">@android:color/white</item>
<!-- 溢出菜單圖標(biāo)顏色 -->
<item name="colorControlNormal">@android:color/white</item>
<!-- 右側(cè)溢出菜單圖標(biāo)自定義 -->
<item name="actionOverflowButtonStyle">@style/ActionButton.Overflow</item>
<!-- 是否覆蓋錨點,默認(rèn)為true责嚷,即蓋住 Toolbar -->
<item name="overlapAnchor">false</item>
<!-- 彈出層背景顏色 -->
<item name="android:colorBackground">@color/weixin_bg</item>
<!-- 設(shè)置彈出菜單文字顏色 -->
<item name="android:textColor">@android:color/white</item>
<!-- 彈出層垂直方向上的偏移搓蚪,即在豎直方向上距離Toolbar的距離搬素,值為負(fù)則會蓋住Toolbar -->
<item name="android:dropDownVerticalOffset">0dp</item>
<!-- 彈出層水平方向上的偏移,即距離屏幕左邊的距離,負(fù)值會導(dǎo)致右邊出現(xiàn)空隙 -->
<item name="android:dropDownHorizontalOffset">0dp</item>
</style>
<!-- 右側(cè)溢出菜單圖標(biāo)自定義 -->
<style name="ActionButton.Overflow" parent="android:Widget.ActionButton.Overflow">
<item name="android:src">@drawable/actionbar_add_icon</item>
</style>
解決菜單Menu添加Icon無效問題锌蓄,讓菜單同時顯示圖標(biāo)和文字
在使用過程中發(fā)現(xiàn)溢出菜單menu 只顯示文字不顯示圖標(biāo):使用反射升筏,要重寫一個onMenuOpened()方法即可解決。
/**
* 利用反射機(jī)制調(diào)用MenuBuilder的setOptionalIconsVisible方法設(shè)置mOptionalIconsVisible為true瘸爽,
* 給菜單設(shè)置圖標(biāo)時才可見 讓菜單同時顯示圖標(biāo)和文字
*/
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
ToolBar 屬性設(shè)置
添加背景色:
<color name="weixin_bg">#434343</color>
android:background="@color/weixin_bg"
基本屬性設(shè)置
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:navigationIcon="@mipmap/title_bar_back"http://左側(cè)圖標(biāo)
app:subtitle="子標(biāo)題"
app:subtitleTextColor="#fff" //子標(biāo)題顏色
app:title="標(biāo)題"
app:titleTextColor="#fff"/> //標(biāo)題顏色
添加選項菜單menu
創(chuàng)建menu
<?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/action_search"
android:icon="@drawable/actionbar_search_icon"
android:title="@string/action_search"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
<item
android:id="@+id/action_group_chat"
android:icon="@drawable/menu_group_chat_icon"
android:title="@string/menu_group_chat"/>
<item
android:id="@+id/action_add_friend"
android:icon="@drawable/menu_add_icon"
android:title="@string/menu_add_friend"/>
<item
android:id="@+id/action_scan"
android:icon="@drawable/men_scan_icon"
android:title="@string/menu_scan"/>
<item
android:id="@+id/action_feedback"
android:icon="@drawable/menu_feedback_icon"
android:title="@string/menu_feedback"/>
</menu>
showAsAction:屬性有五個之:ifRoom您访、never、always剪决、withText灵汪、collapseActionView
- ifRoom:如果有空間,就顯示出來
- never:永遠(yuǎn)不會顯示柑潦。只在溢出列表中顯示识虚,而且只顯示標(biāo)題
- always:無論是否溢出,總會顯示
- withText:示意ActionBar要顯示文本的標(biāo)題妒茬。ActionBar會盡可能的顯示這個標(biāo)題担锤,但是,如果圖標(biāo)有效并且受到ActionBar空間的限制乍钻,文本標(biāo)題就有可能顯示不全
- collapseActionView:聲明了這個操作視窗應(yīng)該被折疊到一個按鈕中肛循,當(dāng)用戶選擇這個按鈕時,這個操作視窗展開银择。否則多糠,這個操作視窗在默認(rèn)的情況下是可見的,并且即便在用于不適用的時候浩考,也要占還有操作欄的有效空間夹孔,一般要配合ifRoom一起使用才有效
代碼中重寫onCreateOptionsMenu方法加載菜單文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return super.onCreateOptionsMenu(menu);
}
左側(cè)返回箭頭
想要顯示自帶的返回箭頭,需要去掉之前設(shè)定的屬性:
app:navigationIcon="@mipmap/title_bar_back"
然后在代碼中添加:
getSupportActionBar().setHomeButtonEnabled(true); //設(shè)置返回鍵可用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
溢出圖標(biāo)顏色
<!-- 溢出菜單圖標(biāo)顏色-->
<item name="colorControlNormal">@android:color/white</item
自定義右側(cè)溢出圖標(biāo)
<style name="AppTheme.ToolBar" parent="AppTheme">
<!--ToolBar 字體顏色改為白色 -->
<item name="titleTextColor">@android:color/white</item>
<!-- 溢出菜單圖標(biāo)顏色 -->
<item name="colorControlNormal">@android:color/white</item>
<!-- 右側(cè)溢出菜單圖標(biāo)自定義 -->
<item name="actionOverflowButtonStyle">@style/ActionButton.Overflow</item>
</style>
<!-- 右側(cè)溢出菜單圖標(biāo)自定義 -->
<style name="ActionButton.Overflow" parent="android:Widget.ActionButton.Overflow">
<item name="android:src">@drawable/actionbar_add_icon</item>
</style>
更改彈出菜單背景
<!-- toolbar彈出菜單樣式背景 -->
<!-- 彈出層背景顏色 -->
<item name="android:colorBackground">@color/weixin_bg</item>
更改彈出菜單文字顏色
<!-- 設(shè)置彈出菜單文字顏色 -->
<item name="android:textColor">@android:color/white</item>
修改標(biāo)題文字大小
添加配置:
app:titleTextAppearance="@style/ToolbarTitleSize"
添加style:
<!-- toolbar標(biāo)題文字大小 -->
<style name="ToolbarTitleSize" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">28sp</item>
</style>