AppCompatActivity與toolbar的結合,封裝BaseActivity

轉載:toolbar結合BaseActivity簡單封裝   github下載地址

AppCompatActivity與toolbar的結合,BaseActivity簡單封裝

Android 5.0的時候就用Toolbar替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代,那么使用方法就是引入Toolbar設置到Activity中
一個應用的幾乎所有界面都需要頭部app bar,為了能夠方便各個界面方便使用,統一管理,這里就來對toolBar進行簡單的封裝。
先上兩張圖:


1,定義一個toolbar_layout.xml文件,封裝toolbar,其他界面需要用,只要include進來就可以了,自定義返回按鈕(navigation),標題(Title),副標題(subTitle)toolbar默認的title在頭部的左邊,由于toolbar是ViewGroup的子類,它就是個容器,這里我們自定義一個title,subTitle,定義兩個TextView放在ToolBar控件中,布局如下:[html] view plain copy
在CODE上查看代碼片
在CODE上查看代碼片
派生到我的代碼片
派生到我的代碼片

<?xml version="1.0" encoding="utf-8"?>  
<android.support.v7.widget.Toolbar  
xmlns:android="http://schemas.android.com/apk/res/android"  
android:id="@+id/toolbar"  
android:layout_width="match_parent"  
android:layout_height="wrap_content"  
android:background="@color/colorPrimary"  
android:minHeight="?attr/actionBarSize">  
<!--自定義toolbar的title 和subtitle -->  
<TextView  
    android:id="@+id/toolbar_subtitle"  
    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:singleLine="true"  
    android:textColor="@color/white"  
    android:text="subtitle"  
    android:paddingRight="10dp"  
    android:layout_gravity="right" />  

<TextView  
    android:id="@+id/toolbar_title"  
    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:lines="1"  
    android:ellipsize="end"  
    android:text="title"  
    android:scrollHorizontally="true"  
    android:textColor="@color/white"  
    android:layout_gravity="center" />  

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

2,我們知道在AndroidManifest.xml清單文件下application中設置了android:theme="@style/AppTheme"而查看AppTheme看到如下樣式[html] view plain copy

派生到我的代碼片
派生到我的代碼片

<resources>  
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">  
</style>  
  </resources>  

從名字我們就可以看出來,默認的標題欄為黑色。我們使用了toolbar就必須修改樣式文件,將原來的標題欄去掉,修改后的樣式文件如下:[html] view plain copy

派生到我的代碼片
派生到我的代碼片

  <style name="AppTheme" parent="AppTheme.Base">  
</style>  
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">  
  <item name="colorPrimary">@color/colorPrimary</item>  
  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>  
  <item name="colorAccent">@color/colorAccent</item>  
 </style>  

實際上就是設置沒有標題,無actionBar主題[html] view plain copy

派生到我的代碼片
派生到我的代碼片

<style name="Theme.AppCompat.Light.NoActionBar">  
    <item name="windowActionBar">false</item>  
    <item name="windowNoTitle">true</item>  
</style>  

為了支持5.0的手機,需要建立一個文件夾values-v21,再新建style.xml文件,設置[html] view plain copy

派生到我的代碼片
派生到我的代碼片

  <style name="AppTheme" parent="AppTheme.Base">  
</style>  

3,封裝一個基類,BaseAppCompatActivity,里面實現toolBar的封裝,注釋已經寫的很詳細了,代碼如下:[java] view plain copy

派生到我的代碼片
派生到我的代碼片

4,這樣就基本把boolbar封裝好了,在其他Activity中就可以方便使用了如,在MainActivity.java中,繼承BaseAppCompatActivity,復寫getLayoutId()方法,設置布局文件,在布局文件中把toolbar_layout文件include進來<include layout="@layout/toolbar_layout"/>,一句話就包含了toolbar,很方便,復寫isShowBacking()方法,設置是否顯示返回按鈕,默認顯示不需復寫.getToolbarTitle().setText("主界面");getSubTitle().setText("更多");調用這兩個方法就可以設置標題和副標題,其他頁面也是一樣很方便的調用[java] [view plain]

(http://blog.csdn.net/wk843620202/article/details/51851785#)
(http://blog.csdn.net/wk843620202/article/details/51851785#)

(https://code.csdn.net/snippets/1750198)

package com.hdc.toolbardemo;  

import android.content.Intent;  
import android.os.Bundle;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.widget.Toast;  

public class MainActivity extends BaseAppCompatActivity {  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    getToolbarTitle().setText("主界面");  
    getSubTitle().setText("更多");  
}  
/** 
 * 設置不顯示返回按鈕 
 * 
 * @return 
 */  
protected boolean isShowBacking() {  
    return false;  
}  
/** 
 * 設置布局 
 * 
 * @return 
 */  
@Override  
protected int getLayoutId() {  
    return R.layout.activity_main;  
}  
/** 
 * 跳轉到登錄界面 
 * 
 * @param view 
 */  
public void login(View view) {  
    Intent intent = new Intent(this, LoginActivity.class);  
    startActivity(intent);  
}  

@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
    // Inflate the menu; this adds items to the action bar if it is present.  
    getMenuInflater().inflate(R.menu.menu_main, menu);  
    return true;  
}  

@Override  
public boolean onOptionsItemSelected(MenuItem item) {  
    // TODO Auto-generated method stub  
    switch(item.getItemId()){  
        case R.id.menu_about:  
            Toast.makeText(MainActivity.this, ""+"關于", Toast.LENGTH_SHORT).show();  
            break;  
        case R.id.menu_settings:  

            Toast.makeText(MainActivity.this, ""+"設置", Toast.LENGTH_SHORT).show();  
            break;  
        case R.id.menu_quit:  

            Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show();  
            break;  
        default:  
            break;  
    }  
    return super.onOptionsItemSelected(item);  
}  

}

源碼下載地址,點擊[這里]

(http://download.csdn.net/detail/wk843620202/9569860)。。。參考資料:android:ToolBar詳解(手把手教程)http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2006.htmlAndroid

設置Toolbar的標題居中:http://dastorm.com/2015/05/31/android%E8%AE%BE%E7%BD%AEtoolbar%E7%9A%84%E6%A0%87%E9%A2%98%E5%B1%85%E4%B8%AD/Activity之AppCompatActivity與toolbar的結合http://www.myexception.cn/android/2053784.html

Android 5.x Theme 與 ToolBar 實戰
http://blog.csdn.net/lmj623565791/article/details/45303349

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,728評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,484評論 2 45
  • 我為什么不喜歡在LOFTER上寫文,是因為LOFTER的讀者倒是很“犀利”,連寫錯一個tag(已及時刪掉了)還會被...
    吉諾佩蒂閱讀 250評論 0 0
  • 當那首《菊次郎的夏天》再次律動的響起來時,內心不自覺的涌過一股暖流,腦海里不自覺地出現正男和菊次郎兩人的形象。 電...
    野炊影像室閱讀 523評論 0 0
  • 今年春節起從接觸山下英子的《斷舍離》,到近藤麻理惠的《怦然心動的人生整理魔法》(文中稱近藤流整理術),又正好逢新辦...
    小初姐閱讀 1,453評論 0 5