ToolBar的使用

在上一篇ActionBar使用中的一些問題中,闡述了ActionBar使用中的一些問題,然後這一篇裏,我嘗試了ToolBar

1、引入
1)根style要引用NoActionBar的Theme,或者在style中重寫
< item name=”windowActionBar” > false < / item>
2)在layout中寫一個toolbar的佈局
< android.support.v7.widget.Toolbar
xmlns:android=”http://schemas.android.com/apk/res/android”
android:id=”@+id/main_drawer_toolbar”
android:layout_width=”match_parent”
android:layout_height=”?attr/actionBarSize”
android:layout_below=”@+id/main_statusBar”
android:background=”?attr/colorPrimary”
android:translationZ=”4dp”
android:popupTheme=”@style/ThemeOverlay.AppCompat.Light”
android:theme=”@style/ThemeOverlay.AppCompat.Dark.ActionBar”/>
3)將上述lauoytinclude進你想要的佈局,然後就可以使用了

2、使用
1)title
var toolBar:Toolbar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolBar)
2)背景
< item name=”android:background”>@color/colorAccent
在測試中發現,上述加載toolbar的父佈局design中時,toolbar的背景只有實際元素的大小,比如你的title 上是兩個字,那麼背景只對這兩個字生效。
另外toolbar有默認的margin,內部填充元素之後margin是自動加的,顯示上左右會有默認的margin
效果
titlebar背景設置
所以如果你想改背景那麼請修改
toolbar的android:background,沒有padding問題

3)返回鍵-Navigation
toolBar.setNavigationIcon( android.R.drawable.ic_menu_set_as )
mBinding?.include?.toolbar?.setNavigationOnClickListener(toolNavigationListener)
toolNavigationListener是一個View.onClickListener
需要注意的是navigation的所有方法都要在此方法要在setSupportActionBar(toolBar)之後調用
我在使用中出現過一個錯誤,無論如何只要加上監聽編譯就報錯
Internal compiler error. See log for more details
後來通過rebuild搞定了
4)padding
toolBar有一個padding設置方法toolBar.setPadding(0,0,0,0)
生效部分之影響menu和navigation。

5)logo
進過測試,logo和title無法增加點擊事件

6)菜單
toolbar的菜單添加方式與actionbar的一致,不同點在於監聽
由於toolbar的返回鍵是通過navigation的監聽進行處理,menu的話則需要ToolBar.setOnMenuItemClickListener,其中要注意使用Toolbar.OnMenuItemClickListener監聽而非Menu的OnMenuItemClickListener,所以如果你用kotlin並且使用這個就不要用lambda,否則會一直報類引用錯誤,╮(╯▽╰)╭

7)菜單選項
菜單摺疊的overflow樣式修改
在根style中修改
android:textColorSecondary屬性
設置樣式style
要引入xmlns:toolbar=”http://schemas.android.com/apk/res-auto”
toolbar菜單默認樣式的父類爲Widget.AppCompat.Light.PopupMenu.Overflow,會顯示在菜單上遮蓋住,這樣不好看,那麼要更改toobar中菜單的彈出的樣式,就必須繼承這個父類的樣式。
toolbar彈出菜單樣式
< style name=”ToolbarPopupTheme” parent=”@style/ThemeOverlay.AppCompat.Dark”>
< item name=”android:colorBackground”>#000000
< / style>
生效:toolbar:popupTheme=”@style/ToolbarPopupTheme” 需要注意使用android:popupTheme不管用

設置彈出位置style
< item name=”actionOverflowMenuStyle”>@style/OverflowMenuStyle < / item>
< / style>
彈框位置
< style name=”OverflowMenuStyle”parent=”Widget.AppCompat.Light.PopupMenu.Overflow” >
< item name=”overlapAnchor”>false
< / style>

8)菜單選擇
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

    if (id == R.id.action_big) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

3、適配
Android 4.4及以上(此版本可對狀態欄顏色進行改變 )
在values文件夾中新建values-v19.xml,內容如下
< resources>
< style name=”AppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>
< item name=”windowActionBar”>false< /item>
< item name=”android:windowNoTitle”>true< /item>
//Toolbar顏色
< item name=”colorPrimary”>@android:color/holo_blue_bright< /item>
//狀態欄顏色
< item name=”colorPrimaryDark”>@android:color/holo_blue_bright< /item>
< item name=”android:windowTranslucentNavigation”>true< /item>
< item name=”android:windowTranslucentStatus”>true< /item>
< /style>
< /resources>
Android 4.4以下
< resources>
< style name=”AppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>
< item name=”windowActionBar”>false< /item>
< item name=”android:windowNoTitle”>true< /item>
//Toolbar顏色
< item name=”colorPrimary”>@color/Indigo_colorPrimary< /item>
< /style>
< /resources>

發佈了62 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章