Activity之AppCompatActivity與toolbar的結(jié)合

轉(zhuǎn)載:www.myexception.cn/android/2053784.html


在API22之前我們使用標(biāo)題欄基本都是在ActionBarActivity的Activity中處理的,而API22之后,谷歌遺棄了ActionBarActivity,推薦我們也可以說是強(qiáng)制我們使用AppCompatActivity。

然而ActionBarActivity與AppCompatActivity的使用大同小異,下面我們將介紹最新的Activity組件之AppCompatActivity的使用系馆。

最后的效果與微信基本相同,圖如下:

1.初探AppCompatActivity

我們按照AndroidStudio的默認(rèn)順序創(chuàng)建項(xiàng)目,默認(rèn)Activity繼承自AppCompatActivity原押。代碼如下:

public classMainActivityextendsAppCompatActivity {@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

運(yùn)行提到如下所示的界面:

其結(jié)果與繼承自Activity并無二致,丑爆了项钮。下面我們來一步一步擴(kuò)展其標(biāo)題欄班眯,讓他的內(nèi)容更豐富多彩。

2.AppCompatActivity與Toolbar結(jié)合

其實(shí)我們并不是要使用AppCompatActivity自帶的標(biāo)題欄烁巫,那樣擴(kuò)展會(huì)很麻煩署隘,在14年的Android 5.0的時(shí)候就用Toolbar替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代,那么使用方法就是引入Toolbar設(shè)置到Activity中亚隙。

㈠首先我們必須在配置文件中磁餐,寫入Toolbar,代碼如下:

解釋①android:minHeight="?attr/actionBarSize":設(shè)置標(biāo)題欄最小高度為ActionBar的高度。

解釋②android:background="?attr/colorPrimary":該主題下的主色诊霹。也就是默認(rèn)的灰色羞延。

我們知道在AndroidManifest.xml清單文件下application中設(shè)置了android:theme="@style/AppTheme"而查看AppTheme看到如下樣式

從名字我們就可以看出來,默認(rèn)的標(biāo)題欄為黑色脾还。我們使用了toolbar就必須修改樣式文件伴箩,將原來的標(biāo)題欄去掉,修改后的樣式文件如下:

如下這個(gè)時(shí)候運(yùn)行鄙漏,那么你將看到界面也是沒有標(biāo)題欄的嗤谚,因?yàn)槟悴]有設(shè)置到AppCompatActivity中去。

㈡將Toolbar顯示到界面

我們創(chuàng)建一個(gè)方法名為initActionBar()怔蚌,首先當(dāng)然是獲取ToolBar控件巩步,然后將Toolbar設(shè)置到Activity中去。代碼如下:

public voidinitActionBar() {? ? Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);setSupportActionBar(toolbar);}

現(xiàn)在運(yùn)行桦踊,我們將得到如下界面:

依然不是你期待的效果椅野,下面我們將介紹AppCompatActivity的細(xì)節(jié)。

3.AppCompatActivity詳解

㈠設(shè)置title

我們可以看到籍胯,標(biāo)題欄始終顯示我們的項(xiàng)目名竟闪,這樣顯然給用戶看是不理想的。那么怎么設(shè)置標(biāo)題欄的字符串芒炼。我們可以在setSupportActionBar(toolbar)之前加入如下代碼:

setTitle("liyuanjinglylyj");

此setTitle("liyuanjinglyj")是AppCompatActivity的方法瘫怜,并不是toolbar的方法,那么我們運(yùn)行一下程序?qū)⒌玫饺缦陆缑妫?/p>

那么我們將剛才的AppCompatActivity的setTitle換成Toolbar的setTitle看看效果會(huì)怎么樣本刽,其實(shí)結(jié)果如上圖一樣鲸湃,沒有任何變化。

可能你希望title顯示在中間子寓,很遺憾暗挑,toolbar與AppCompatActivity并沒有提供相關(guān)的方法,不過可以在toolbar中加入一個(gè)TextView斜友,配置其屬性炸裆,讓其顯示在最中間。

㈡設(shè)置回退按鈕

假如我的這個(gè)界面并不是主界面鲜屏,而是一個(gè)子界面烹看,這個(gè)時(shí)候我有一個(gè)需求,需要回退到上一個(gè)界面那么怎么設(shè)置左邊的圖標(biāo)并實(shí)現(xiàn)其方法洛史。其實(shí)很簡單惯殊,在setSupportActionBar(toolbar);后面加入如下代碼:

toolbar.setNavigationIcon(R.drawable.back);toolbar.setNavigationOnClickListener(newView.OnClickListener() {@Overridepublic voidonClick(View v) {? ? ? ? finish();}});

為什么在setSupportActionBar(toolbar);后面加入而不在前面,你可以加入到前面試試也殖,雖然可以顯示回退的圖片土思,但是點(diǎn)擊并沒有調(diào)用該按鈕的點(diǎn)擊事件,而在setSupportActionBar(toolbar);后面設(shè)置點(diǎn)擊才有反應(yīng)。一定要記住己儒,不然回退是不會(huì)起作用的崎岂。

運(yùn)行結(jié)果如下:

㈢設(shè)置logo

設(shè)置logo在標(biāo)題欄并不少見,比如網(wǎng)易APP首頁就的網(wǎng)易設(shè)置的logo闪湾,其實(shí)代碼很簡單冲甘,也僅僅需要一條代碼即可,在setSupportActionBar(toolbar)前加入如下代碼:

toolbar.setLogo(R.id.app_logo);

運(yùn)行結(jié)果如下:

㈣設(shè)置副標(biāo)題

在setSupportActionBar(toolbar)前加入如下代碼::

toolbar.setSubtitle("liyuanjing");

運(yùn)行界面后途样,如下:

㈤設(shè)置菜單

我們知道onCreateOptionsMenu是上下文菜單损合,同理可以直接在該方法中設(shè)置菜單,代碼如下:

@Overridepublic booleanonCreateOptionsMenu(Menu menu) {? ? getMenuInflater().inflate(R.menu.menu_main,menu);return? true;}

此方法為Activity方法娘纷。因?yàn)槟阍谏厦嬉呀?jīng)講Toolbar設(shè)置到了Activity中,所以默認(rèn)也會(huì)顯示到標(biāo)題欄中跋炕,如果你覺得這樣不習(xí)慣赖晶,那么你可以添加一條語句,不過這條語句添加不添加都沒關(guān)系辐烂。

toolbar.setOnCreateContextMenuListener(this);

運(yùn)行程序遏插,如下圖所示:

4.Toolbar的Style

3標(biāo)題下的Toolbar是藍(lán)色,且有很好Style纠修,那么這是怎么設(shè)置呢胳嘲,雖然我們這里重點(diǎn)是剖析Activity但是遇到有關(guān)Activity標(biāo)題欄樣式的還是要提到。

我們粗略的講解上面的標(biāo)題欄用到了哪些Style:

①#4876FF:如第一步直接在toolbar控件下面設(shè)置的屬性一樣扣草,就是toolbar的顏色了牛。

②#3A5FCD:狀態(tài)欄顏色也就是標(biāo)題欄上面的那個(gè)顏色,而我用的是小米1S測(cè)試的辰妙,其固件并沒有很好的實(shí)現(xiàn)其功能鹰祸,所以在該系統(tǒng)下并沒有實(shí)現(xiàn)其效果。

③@android:color/white:窗口背景色密浑,也就是Activity標(biāo)題欄下面所有地方的顏色蛙婴。

當(dāng)我們?cè)O(shè)置了如上三個(gè)屬性,那么效果圖就如上面所示了尔破,完整代碼如下:

#4876FF#3A5FCD@android:color/white

5.Toolbar菜單樣式

我們來看看如果直接使用上面的點(diǎn)擊后邊的菜單會(huì)有什么效果:

你有看到那個(gè)APP菜單彈出擋住了標(biāo)題欄嗎街图?,肯定沒有吧懒构,要是有的話餐济,你肯定立即卸載了該應(yīng)用了。

下面我們的任務(wù)就是將該菜單的樣式和其他APP一樣痴脾,在標(biāo)題欄下面彈出颤介。

首先要說明一下,toolbar菜單默認(rèn)樣式的父類為Widget.AppCompat.Light.PopupMenu.Overflow,那么要更改toobar中菜單的彈出的樣式滚朵,就必須繼承這個(gè)父類的樣式冤灾。

其代碼如下:

#4876FF#3A5FCD@android:color/white@style/LYJMenuStylefalse

設(shè)置這一個(gè)屬性那么其彈出的樣式就與其他APP一樣不會(huì)覆蓋標(biāo)題欄。

還有其他屬性這里簡要說明一下:

①?attr/colorPrimary:彈出菜單背景色為標(biāo)題欄的背景色

②0dip:彈出菜單與標(biāo)題欄的垂直間距

將這兩條加入LYJMenuStyle中就可以了實(shí)現(xiàn)如下圖所示的彈出菜單:

最后介紹一下菜單里面重要的幾個(gè)屬性:

app:showAsAction有三個(gè)值:

always:總是顯示在界面上

never:不顯示在界面上辕近,只讓出現(xiàn)在右邊的三個(gè)點(diǎn)中

ifRoom:如果有位置才顯示韵吨,不然就出現(xiàn)在右邊的三個(gè)點(diǎn)中

可以用 | 同時(shí)使用兩個(gè)上面的值。

系統(tǒng)也為菜單提供了默認(rèn)的分享菜單與查詢菜單移宅,代碼如下:

app:actionViewClass="android.support.v7.widget.SearchView"

app:actionProviderClass="android.support.v7.widget.ShareActionProvider"

從名字想必不需要過多解釋归粉,最后一個(gè)就是顯示的優(yōu)先級(jí),也就是顯示的順序漏峰,誰在最前面糠悼,誰在后面:

android:orderInCategory數(shù)值越小,顯示靠前浅乔,且優(yōu)先級(jí)最大倔喂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靖苇,隨后出現(xiàn)的幾起案子席噩,更是在濱河造成了極大的恐慌,老刑警劉巖贤壁,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悼枢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脾拆,警方通過查閱死者的電腦和手機(jī)馒索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來名船,“玉大人双揪,你說我怎么就攤上這事“悖” “怎么了渔期?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渴邦。 經(jīng)常有香客問我疯趟,道長,這世上最難降的妖魔是什么谋梭? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任信峻,我火速辦了婚禮,結(jié)果婚禮上瓮床,老公的妹妹穿的比我還像新娘盹舞。我一直安慰自己产镐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布踢步。 她就那樣靜靜地躺著癣亚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪获印。 梳的紋絲不亂的頭發(fā)上述雾,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音兼丰,去河邊找鬼玻孟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳍征,可吹牛的內(nèi)容都是我干的黍翎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艳丛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼玩敏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起质礼,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎织阳,沒想到半個(gè)月后眶蕉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唧躲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年造挽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弄痹。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饭入,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肛真,到底是詐尸還是另有隱情谐丢,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布蚓让,位于F島的核電站乾忱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏历极。R本人自食惡果不足惜窄瘟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趟卸。 院中可真熱鬧蹄葱,春花似錦氏义、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琼稻,卻和暖如春吮螺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帕翻。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鸠补, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘀掸。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓紫岩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睬塌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泉蝌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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