1. 程式人生 > >ToolBar使用教程(小白快速上手)

ToolBar使用教程(小白快速上手)

###ToolBar效果展示:(做工粗糙,有那個意思就行了)###
這裡寫圖片描述

###概述:
在toolbar出來之前,對於標題欄的操作,小夥伴接觸比較多的應該是ActionBar了.這裡說明下啊,使用ToolBar能都實現和ActionBar 一樣的效果.那麼問題來了**,為什麼Google官方還要推薦toolbar來替代actionbar呢?**

**第一點,**要知道Google於2015年引入Material Design風格的控制元件,Android SDK中的ActionBar每個版本都會做一些改變, 所以在不同的系統上看起來可能會不一樣,導致嚴重的碎片化問題,於是谷歌在更新android-support-v7相容包時引入了ToolBar,用來替代ActionBar,它推薦開發者使用相容包中的ToolBar,而非SDK中的ActionBar,以期解決碎片化問題
**第二點,**還有一個原因就是ActionBar的可操作性比不上ToolBar.主要是因為toolbar的使用需要在layout.xml中進行定義,而actionbar的使用則不存在這種定義方式. 那麼當進行某些引數調節的時候,toolbar可能只需在xml佈局檔案中定義toolbar的時候新增一個屬性就可以了.而action則比較麻煩.這一點可以在

Android Studio環境下ActionBar的使用教程以及如何解決遇到的問題找到部分佐證.

###使用方法:
Step1.
為了之後設定方便,我們先在 res/values/styles.xml 裡增加一個名為 AppTheme.Base 的風格
一在 res/values/styles.xml中,新增


    <style name="AppTheme.Base" parent="Theme.AppCompat">
        <!-- 如果報錯AppCompat does not support the current theme features....則去除字首
:android --> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <!--Window color--> <item name="android:windowBackground">@color/dim_foreground_material_dark</item> <!-- colorPrimary 應用的主要色調,actionBar預設使用該顏色,Toolbar導航欄的底色--> <item name="colorPrimary"
>@color/colorPrimary</item>
</style> <!-- Base application theme. --> <style name="AppTheme" parent="AppTheme.Base"></style>

二在 /res/values-v21/styles.xml中


    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!--Navigation bar color-->
        <item name="android:navigationBarColor">@color/accent_material_light</item>
    </style>

科普一下,正常情況下,當使用as新建一個工程時,style中預設主題中的引數指標的對應意義,瞭解一下.

<resources>
    <!-- Base application theme. -->
    <style name="Theme.AppCompat" parent="Theme.AppCompat.Light.DarkActionBar">
         <!-- 1.colorPrimary 應用的主要色調,actionBar預設使用該顏色,Toolbar導航欄的底色-->
        <item name="colorPrimary">@color/colorPrimary</item>

        <!-- 2.statusBarColor 狀態列(通知欄)顏色,預設使用colorPrimaryDark-->
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

        <!-- 3.colorAccent—控制元件選中後顏色-->
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

Step2.
在layout佈局中定義toolbar.

    <!--todo  android:background="?attr/colorPrimary"y沿用actionbar的顏色設定-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStartWithNavigation="0dp">

    </android.support.v7.widget.Toolbar>

請記得用 support v7 裡的 toolbar,不然然只有 API Level 21 也就是 Android 5.0 以上的版本才能使用。

Step3.
定義tool_menu.xml檔案,用於toolbar標題欄中各種action按鈕的展示.

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.zq.actionbardemo.ThirdActivity">

    <item
        android:id="@+id/action_query"
        android:title="搜尋"
        android:icon="@mipmap/ic_action_query"
        app:showAsAction="always"
        app:actionViewClass="android.widget.SearchView" />

    <!--todo orderInCategory越大優先順序越低-->
    <item
        android:id="@+id/action_download"
        android:title="下載"
        android:icon="@mipmap/ic_action_download"
        android:orderInCategory="100"
        app:showAsAction="always" />


    <item
        android:id="@+id/action_edit"
        android:title="編輯"
        android:icon="@mipmap/ic_action_edit"
        android:orderInCategory="90"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_delete"
        android:title="刪除"
        android:icon="@mipmap/ic_action_delete"
        android:orderInCategory="80"
        app:showAsAction="always" />

</menu>

Step4.
在MainActivity.java中載入toolbar的menu資源

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

Step5.
在 MainActivity.java 中加入 Toolbar 的宣告:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);

        // App Logo
        toolbar.setLogo(R.mipmap.return_icon);
        // Title
        toolbar.setTitle("My Title");
        // Sub Title
        toolbar.setSubtitle("Sub title");

        setSupportActionBar(toolbar);

        // Navigation Icon 要設定在 setSupoortActionBar 才有作用
        // 否則會出現 back button
        toolbar.setNavigationIcon(R.mipmap.return_icon);
        toolbar.setOnMenuItemClickListener(onMenuItemClick);
    }

    private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            String msg = "";
            switch (menuItem.getItemId()) {
                case R.id.action_edit:
                    msg += "Click edit";
                    break;
                case R.id.action_delete:
                    msg += "Click delete";
                    break;
                case R.id.action_download:
                    msg += "Click download";
                    break;
            }

            if(!msg.equals("")) {
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    };

對上述程式碼做簡要說明.
1.setNavigationIcon: 即設定 up button 的圖示,因為 Material 的介面,在 Toolbar這裡的 up button樣式也就有別於過去的 ActionBar 哦。
2. setLogo: APP 的圖示。
3. setTitle: 主標題。
4. setSubtitle: 副標題。
5. setOnMenuItemClickListener: 設定選單各按鈕的動作。
這邊要留意的是setNavigationIcon需要放在 setSupportActionBar之後才會生效

#####最後對ToolBar中用於調節的各個引數指標進行總結下.

  • colorPrimaryDark
    狀態列背景色。
    在 style 的屬性中設定。
  • textColorPrimary
    App bar 上的標題與更多選單中的文字顏色。
    在 style 的屬性中設定。
  • App bar 的背景色
    Actionbar 的背景色設定在 style 中的 colorPrimary。
    Toolbar 的背景色在layout檔案中設定background屬性。
  • colorAccent
    各控制元件(如:check box、switch 或是 radoi) 被勾選 (checked) 或是選定 (selected) 的顏色。
    在 style 的屬性中設定。
  • colorControlNormal
    各控制元件的預設顏色。
    在 style 的屬性中設定
  • windowBackground
    App 的背景色。
    在 style 的屬性中設定
  • navigationBarColor
    導航欄的背景色,但只能用在 API Level 21 (Android 5) 以上的版本
    在 style 的屬性中設定

OK,完結.有疑問請留言.
另外給大家推薦一個比較好的參考博文,上面講的比較詳細.
android:ToolBar詳解(手把手教程)