Material Design之ActionBar、ToolBar

前言

Material Design是由谷歌的設計工程師們基於傳統優秀的設計原則,結合豐富的創意和科學技術所發明的一套全新的界面設計語言,包含了視覺、運動、互動效果等特性。現實生活中,很多公司會自己封裝界面的跳轉、設計等,於是很多android應用風格不統一。鑑於此,Google工程師們提供了一套基本的平臺界面。

此係列文章,一點點的介紹Material Design風格搭建。首先是“標題欄”:

工程創建

不必說,new project-empty activity,各種自己保存。空工程如圖一:

圖一

ActionBar

原系統自帶標題欄ActionBar基本上都知道,很多公司會自己封裝的,可以試着更改AndroidManifest.xml文件的一些屬性,更改主題(當然,app名字、app桌面圖標都可以在這裏改):

圖二
圖三

android:theme="@style/AppTheme"這句話就是app的主題,所謂主題,就是圖三。點擊跳轉到styles.xml文件(res/values/style.xml),更改AppTheme,可以查看不同(自己增加點color)。

//這是style.xml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/blue</item>
        <item name="colorPrimaryDark">@color/main_color</item>
        <item name="colorAccent">@color/red</item>
    </style>
   //這是colors.xml

    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>

    <color name="yellow">#FFFF00</color>
    <color name="blue">#834cb1</color>
    <color name="white">#FFFFFF</color>
    <color name="red">#E91010</color>
    <color name="black">#353535</color>
    <color name="main_color">#0065b4</color>
    <color name="dividerColor">#dadada</color>
    <color name="gray">#AAAAAA</color>

其實如果熟悉Framwork的話,應該知道,activity裏面實際上有個phoneWindow,裏面又有個decorView的,所以我們平時的setContentView()方法,知道放哪兒去了吧。

最後運行得到:

圖四
圖五

ToolBar

現在增加Material Design的ToolBar:修改activity_main.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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!--高度:actionBar的size-->
    <!--主題爲深色系-->
    <!--彈出框爲淺色系-->
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/main_color"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

至於爲什麼要這麼寫,註釋已經有了。關於那個@style,實際上就是style定義的資源,裏面的資源是可寫成<...,parent:...>,類似於繼承樣式的,具體可以自己研究。

Mainactivity裏面也要改一下,不然加進來的這個toolbar就只是個佈局view:

圖六

用Buttknife也好,自己用findviewbyid也好,隨便。運行得到效果:

圖七

標題欄太單調了?是的。再加吧,也可以自己定義view,然後佈局,加自己想要的,當然,這裏介紹的Material Design,那就用這種吧。

New-Menu resource file(在res-layout裏面,也可以自己建一個directory包,單獨放自己的menu,都是可以的)。這個menu就是自己找圖自己定義了。

圖八

MainActivity裏面修改(重寫父類某兩個函數):

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

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.search:
                Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(this, "設置", Toast.LENGTH_SHORT).show();
                break;
            case R.id.add:
                Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return true;
    }

運行結果:(可以根據需要在toolBar裏面增加返回按鍵,修改activity_main.xml,在toolbar裏面增加1,或者在MainActivity的oncreat裏面添加2)。

這裏爲了演示,效果圖太醜太醜,感覺會毀了人家公司。。。。(所以自定義ActionBar到BaseActivity的確也很完美)

//1
app:navigationIcon="@mipmap/title_bar_back"
//2
toolbar.setNavigationIcon(R.mipmap.back);
圖九
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章