Android Toolbar的基礎(chǔ)使用

第一步

將打算使用Toolbar的Activity繼承AppCompatActivity呀闻。為什么要讓Activity繼承這個(gè)類呢捡多?我們來(lái)看下官方文檔對(duì)AppCompatActivity的介紹:You can add an ActionBar to your activity when running on API level 7 or higher by extending this class for your activity and setting the activity theme to Theme.AppCompat or a similar theme.就是說(shuō)垒手,我們可以通過(guò)繼承AppCompatActivity類和設(shè)置Theme.AppCompat主題科贬,來(lái)使我們可以添加一個(gè)ActionBar。

public class MainActivity extends AppCompatActivity {
      @Overrideprotected 
      void onCreate(Bundle savedInstanceState) {
            ...
      }
}

第二步

設(shè)置Theme.AppCompat主題乘综。Theme.AppCompat主題到底代表這什么呢瘾带,讓我們來(lái)看看Theme.AppCompat的官方文檔:Themes in the "Theme.AppCompat" family will contain an action bar by default. 就是說(shuō)看政,"Theme.AppCompat"系列的主題都會(huì)默認(rèn)包含一個(gè)ActionBar允蚣。"Theme.AppCompat"主題有兩個(gè)子主題嚷兔,我們會(huì)用到:

  • "Theme.AppCompat.Light.NoActionBar"主題冒晰,當(dāng)設(shè)置為這個(gè)主題時(shí)壶运,Activity將沒(méi)有默認(rèn)的Actionbar蒋情。源代碼如下
    <style name="Theme.AppCompat.Light.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
  • "Theme.AppCompat.Light.NoActionBar"主題棵癣,這個(gè)主題Activity也沒(méi)有Action Bar狈谊,同時(shí)Activity背景變成了深色沟沙。
    <style name="Theme.AppCompat.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

當(dāng)然我們并不是直接使用系統(tǒng)提供的Theme尝胆,而是繼承某個(gè)Theme煎娇,進(jìn)行一定程度的自定義。我們?cè)趕tyles.xml寫下如下代碼:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <!--colorPrimary主要負(fù)責(zé)的是App Bar的背景顏色 -->
        <item name="colorPrimary">@color/colorPrimary</item>

        <!--colorPrimaryDark主要負(fù)責(zé)的是狀態(tài)欄status bar的背景顏色 -->
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

        <!--colorAccent主要負(fù)責(zé)的是某些選擇控件的背景顏色 -->
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

第三步

將剛剛自定義的Theme,在menifest.xml文件中的Application標(biāo)簽中聲明因妙,也可以在Activity標(biāo)簽中聲明攀涵;

<menifest...>
    ...
    <Application
          ...
          android:theme="@style/Apptheme">
    ...
    </Application>
</menifest>

第四步

在Activity的布局文件中添加Toolbar

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        />

?attr/actionBarsize 是指使用Theme中該屬性actionBarSize的值以故。

第五步

在Java代碼中添加Toolbar裆操,并且可以通過(guò)Java語(yǔ)句添加App圖標(biāo)昆烁,導(dǎo)航圖標(biāo)缎岗,主標(biāo)題静尼,副標(biāo)題,自定義內(nèi)容等等密强∶├桑可以通過(guò)查閱Toolbar官方文檔來(lái)深入學(xué)習(xí)蜗元。下面的代碼是位于該Activity的onCreate()方法中或渤。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setLogo(R.mipmap.ic_launcher);
toolbar.setTitle("我是主標(biāo)題");
toolbar.setSubtitle("我是副標(biāo)題");
toolbar.setNavigationIcon(R.mipmap.ic_launcher);
toolbar.inflateMenu(R.menu.menu_main);

第六步

添加Toolbar上的菜單。首先在res/menu文件夾中添加menu_main.xml文件奕扣,menu_main.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"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    >

    <item   android:id="@+id/action_edit"
        android:title="編輯"
        android:orderInCategory="80"
        android:icon="@drawable/ic_menu_home"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_setting"
        android:title="分享"
        android:orderInCategory="90"
        app:showAsAction="never"/>

    <item
        android:id="@+id/action_share"
        android:title="設(shè)置"
        android:orderInCategory="100"
        app:showAsAction="never"/>
</menu>

然后在Java代碼中將其添加到toolbar中薪鹦,并為toolbar添加點(diǎn)擊事件,下面的代碼也在Activity的onCreate()方法中惯豆。

        onMenuItemClickListener = new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                String msg = "";
                switch (item.getItemId()){
                    case R.id.action_edit:
                        msg += "edit";
                        break;
                    case R.id.action_setting:
                        msg += "setting";
                        break;
                    case R.id.action_share:
                        msg += "share";
                        break;
                }
                if (!msg.equals("")){
                    Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();
                }
                return true;
            }
        };

        toolbar.setOnMenuItemClickListener(onMenuItemClickListener);

到此,Toolbar的基本功能就完成了。下面是一些零碎的注意事項(xiàng)端考。

顏色設(shè)置

  • 設(shè)置狀態(tài)欄status bar的顏色
<item name="colorPrimaryDark">#000000</item>

或者在布局文件中設(shè)置Toolbar的背景顏色

  • 設(shè)置App bar上的主標(biāo)題的顏色,overflow menu選項(xiàng)的字體顏色
<item name="android:textColorPrimary">@android:color/holo_red_light</item>

注意textColorPrimary這個(gè)屬性除了設(shè)置主標(biāo)題的顏色外椿浓,還設(shè)置了overflow menu中選項(xiàng)的字體顏色左腔。除了這個(gè)方法巧还,還可以在toolbar的布局文件中設(shè)置。這個(gè)方法只會(huì)設(shè)置主標(biāo)題的顏色。所以惧辈,可以利用這兩個(gè)方法边翁,現(xiàn)在textColorPrimary中設(shè)置overflow menu選項(xiàng)字體顏色啊胶,再用app:titleTextColor覆蓋主標(biāo)題的顏色痴晦。注意:是"app:" 不是"android:"碧浊。

xmlns:app="http://schemas.android.com/apk/res-auto"
...
app:titleTextColor="@android:color/white"
  • 設(shè)置App bar上的副標(biāo)題的顏色
<item name="android:textColorSecondary">#000000</item>

或者在布局文件中

app:subtitleTextColor="@android:color/black"

其中第二種會(huì)覆蓋第一中方法劳较。注意:是"app:" 不是"android:"。

  • 設(shè)置控制元件(switch等按鈕)被選定或者選擇的顏色
<item name="android:colorAccent">#000000</item>
  • 設(shè)置app的背景色
<item name="android:windowBackground">#000000</item>
  • 設(shè)置各控制元件(switch等)的默認(rèn)顏色砖第,以及overflow menu按鈕(三個(gè)點(diǎn))的顏色
<item name="colorControlNormal">#000000</item>
  • 設(shè)置導(dǎo)航欄的背景顏色袱院,只在Android 5.0后有效
<item name="navigationBarColor">#000000</item>
  • 修改overflow menu中的選項(xiàng)的文字大小,(但是也會(huì)Activity中的TextView中的文字的大小,不過(guò)可以在布局文件中更改)
<item name="android:textSize">50sp</item>

最后

  • 這只是Toolbar的基本使用欣喧,還有很多高階的使用驯鳖,比如和CoordinatorLayout在一起的動(dòng)畫效果等等记舆,還要繼續(xù)學(xué)習(xí)盛正。
  • Toolbar在Java代碼和XML文字中還有更多設(shè)置续崖,可以通過(guò)查閱Toolbar官方文檔來(lái)深入學(xué)習(xí)逻恐。

主要參考文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堕澄,一起剝皮案震驚了整個(gè)濱河市途戒,隨后出現(xiàn)的幾起案子崔泵,更是在濱河造成了極大的恐慌幌甘,老刑警劉巖潮售,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锅风,居然都是意外死亡酥诽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門皱埠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肮帐,“玉大人,你說(shuō)我怎么就攤上這事边器⊙凳啵” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵忘巧,是天一觀的道長(zhǎng)恒界。 經(jīng)常有香客問(wèn)我,道長(zhǎng)砚嘴,這世上最難降的妖魔是什么十酣? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮际长,結(jié)果婚禮上婆誓,老公的妹妹穿的比我還像新娘。我一直安慰自己也颤,他們只是感情好洋幻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著翅娶,像睡著了一般文留。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竭沫,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天燥翅,我揣著相機(jī)與錄音,去河邊找鬼蜕提。 笑死森书,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凛膏,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼杨名,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了猖毫?” 一聲冷哼從身側(cè)響起台谍,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吁断,沒(méi)想到半個(gè)月后趁蕊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔役,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年掷伙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片又兵。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炎咖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寒波,到底是詐尸還是另有隱情乘盼,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布俄烁,位于F島的核電站绸栅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏页屠。R本人自食惡果不足惜粹胯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辰企。 院中可真熱鬧风纠,春花似錦、人聲如沸牢贸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潜索。三九已至臭增,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竹习,已是汗流浹背誊抛。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留整陌,地道東北人拗窃。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓瞎领,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親随夸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子九默,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,431評(píng)論 2 45
  • 轉(zhuǎn)載請(qǐng)說(shuō)明出處:Android開(kāi)發(fā)細(xì)節(jié)--查漏補(bǔ)缺(一):UI篇 引言:一開(kāi)始逃魄,先和大家可能從最開(kāi)始接觸Andro...
    androidjp閱讀 1,119評(píng)論 0 9
  • 我?guī)闳ツ抢锟瓷介?..... 《山楂樹之戀》荤西,一段青澀傷痛的愛(ài)情澜搅,相愛(ài)不能愛(ài)伍俘,再愛(ài)已不再。 靜秋初見(jiàn)老三時(shí)...
    王慧麗whI閱讀 405評(píng)論 0 0
  • 瘦枝細(xì)爪猖狂舞勉躺,勾黨連根網(wǎng)羅布癌瘾。 枉費(fèi)詩(shī)人多少頌,到頭爾心總空無(wú)饵溅。
    江南煙雨閱讀 575評(píng)論 2 14