前言
最近這幾天被Android主題與Toolbar樣式搞暈了,因為本來自己的Android根基就淺匪补,對這方面又一直沒有深入了解過伞辛;后來在Google上搜索到一篇文章:Android: Changing the Toolbar’s text color and overflow icon color,該文章對這方面有一定描述夯缺,幫助我理解了一些內(nèi)容蚤氏。
然后我試著將這篇文章翻譯了一下,想著不明白的時候再回來查閱踊兜,譯文:Android:改變 Toolbar 的文字和溢出圖標(biāo)顏色竿滨。
今天又測試一下相關(guān)內(nèi)容,這里寫點東西記一下捏境。
目的
我的最終目的是在Light主題上得到深色Toolbar背景色和白色菜單按鈕于游,包括溢出菜單背景色和Menu項字體顏色都一致,如下圖所示:
下面描述一下如何得到這么一個效果典蝌。
最初的樣子
新創(chuàng)建項目時在style.xml中定義一下AppTheme并在AndroidManifest.xml文件中指定為App的主題(android:theme=”@style/AppTheme”)曙砂,Style定義如下所示:
其它測試代碼省略。這時我們運行一下骏掀,可以看到界面如下所示:
感覺黑色的標(biāo)題和菜單真的好丑鸠澈,因為淺色主題期 App Bar (Toolbar 或者 ActionBar)擁有淺色背景,因此給你用上了黑色的標(biāo)題和溢出菜單圖標(biāo)截驮,包括菜單字體的顏色笑陈。
定義溢出菜單樣式
我們看到上面的效果圖中溢出菜單是覆蓋在Toolbar之上的,我希望它能像微信中的一樣出現(xiàn)在Toolbar下面葵袭,可以通過自定義樣式來做到這些涵妥。
在style.xml中定義OverflowMenuStyle樣式如下所示:
這時有兩種方式應(yīng)用這個樣式:
這時我們運行App,效果如下所示:
溢出菜單的彈出層已經(jīng)位于Toolbar的下方了坡锡,而且背景色也改為我們期望的colorPrimary顏色蓬网。
接下來我們嘗試改變一下標(biāo)題和溢出菜單項的文字顏色。
Dark主題
這時改變標(biāo)題和溢出圖標(biāo)為白色的最簡單方法就是使用Dark主題作為我們的App主題鹉勒,因為Dark主題會默認(rèn)使用白色的標(biāo)題和溢出菜單圖標(biāo)帆锋,那么我們試一下。
修改AppTheme的父主題為“Theme.AppCompat.NoActionBar”禽额,該部分代碼如下所示:
運行效果如下所示:
這時已經(jīng)很接近我的目標(biāo)了锯厢,但由于用的是Dark主題皮官,因此TextView的背景色是黑色的,我不希望我的大部分UI控件都是深色系統(tǒng)的实辑,因此這種方式我不想采用捺氢。
我把AppTheme的parent改回“Theme.AppCompat.Light.NoActionBar”主題,這時再看一遍當(dāng)前的運行效果:
這是淺色主題下的表現(xiàn)剪撬,接下來嘗試改變這些黑色字體摄乒。
改變Toolbar主題
Android 5.0引入一個全新的特性,允許你對view設(shè)置theme婿奔,這種設(shè)置會影響控件及其包含的子控件缺狠。
使用AppCompat v22.1.x 后,也可以給你 layout 里的任意視圖設(shè)置主題萍摊。
只要使用 android:theme 這個屬性就好挤茄,新版本的兼容庫可以在 compat 和 framework 之間無縫地切換功能。
從上面的描述中可以得知冰木,我們可以單獨為Toolbar設(shè)置主題穷劈,主題中的樣式將影響Toolbar本身及其子View;因此我們考慮是否可以為Toolbar設(shè)置一個深色主題踊沸,這樣系統(tǒng)會將標(biāo)題和溢出圖標(biāo)等元素顏色設(shè)置為白色歇终。
嘗試將Toolbar主題設(shè)置為“ThemeOverlay.AppCompat.Dark.ActionBar”如下所示:
運行App可以看到確實有效果,這樣我們就可以得到開關(guān)描述的效果了(淺色主題下Toolbar使用深色背景逼龟,并且將標(biāo)題评凝、溢出圖標(biāo)及溢出菜單文字改為白色)。
再看一遍最終效果圖吧腺律!