Toolbar的使用總結

從Android5.0開始,谷歌推出了Material Design風格的導航控件----Toolbar。粗暴的來說,它是用來替換Actionbar的(原因呢,很多寫Toolbar的文章都說了,就不再啰嗦了)。
Toolbar的API中寫到,相比Actionbar來說,Toolbar能夠支撐更加集中的功能集。Toolbar含有以下可選元素:

  • A navigation button: 導航按鈕
  • A branded logo image:logo圖標
  • A title and subtitle:標題和副標題
  • One or more custom views:一個或多個自定義view
  • An action menu:菜單按鈕

Toolbar入門

使用v7包里的Toolbar,才能向下兼容。不然只能5.0以上的才能用。

android.support.v7.widget.Toolbar
  1. 在使用Toolbar前,要隱藏原來的Actionbar。方法有兩種:
    • 在AndroidManifest.xml中,給application或者是相應的activity設置相應的主題:
      android:theme="@style/Theme.AppCompat.Light.NoActionBar"
      或自定義style,在設置給application或者是相應的activity:
      <style name="...">
      <item name="windowActionBar">false</item>
      <item name="windowNoTitle">true</item>
      </style>
    • 在代碼中設置:
          /**
           * 1.一定要設置在setContentView()前邊
           * 2.如果activity繼承的是AppCompatActivity(AS現在默認的都是AppCompatActivity),
           *   supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
           * 3.如果activity繼承的是Activity,
           *   requestWindowFeature(Window.FEATURE_NO_TITLE);
           */
          supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.activity_main);
  1. 隱藏Actionbar后,就可以使用Toolbar了。
    在布局文件中添加Toolbar,
<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:titleTextColor="#ffffff">
    </android.support.v7.widget.Toolbar>

在activity中,

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
    }

運行后,


toobar-1.PNG

Toolbar各元素基本使用及自定義

  1. 導航按鈕
    • 顯示自帶的返回按鈕,也就是Actionbar中的返回按鈕,并點擊監聽
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
    }

運行后,


toolbar-2.PNG
  • 設置自定義按鈕圖標
    兩種方法:
    • 在布局文件中
<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:titleTextColor="#ffffff"
        app:navigationIcon="@mipmap/menu">
- 代碼中設置
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
//        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mToolbar.setNavigationIcon(R.mipmap.menu);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
    }

運行后,


toolbar-3.PNG
  1. 設置logo
    同樣是兩種:
app:logo="@mipmap/ic_launcher"

 mToolbar.setLogo(R.mipmap.ic_launcher);

運行后,


toolbar-4.PNG
  1. 設置標題和副標題
        app:titleTextColor="#ffffff"
        app:title="標題"
        app:subtitle="副標題"
        app:subtitleTextColor="#ffffff"

在代碼中設置

        mToolbar.setTitle("標題");
        mToolbar.setTitleTextColor(Color.WHITE);
        mToolbar.setSubtitle("副標題");
        mToolbar.setSubtitleTextColor(Color.WHITE);

運行后,


toolbar-6.PNG
  1. 自定義view
 <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="View"
            android:textColor="#ffffff"
            android:layout_gravity="center"
            android:textSize="25sp"/>
    </android.support.v7.widget.Toolbar>

運行后,


toolbar-7.PNG

在代碼中設置,

 mToolbar.addView(LayoutInflater.from(this).inflate(R.layout.tv,null));

運行后,


toolbar-8.PNG
  1. 菜單按鈕
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/m1"
        android:title="分享1"
        android:icon="@drawable/share"
        app:showAsAction="never"/>
    <item
        android:id="@+id/m2"
        android:title="設置2"
        android:icon="@drawable/set"
        app:showAsAction="never"
        />
    <item
        android:id="@+id/m3"
        android:title="分享3"
        android:icon="@mipmap/share"
        app:showAsAction="always"/>
    <item
        android:id="@+id/m4"
        android:title="設置4"
        android:icon="@mipmap/set"
        app:showAsAction="always"/>
    <item
        android:id="@+id/m5"
        android:title="分享5"
        android:icon="@mipmap/share"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/m6"
        android:title="設置6"
        android:icon="@mipmap/set"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/m7"
        android:title="分享7"
        android:icon="@mipmap/share"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/m8"
        android:title="設置8"
        android:icon="@mipmap/set"
        app:showAsAction="ifRoom"/>
</menu>

showAsAction,指定該按鈕顯示的位置,有幾個值可選:always,表示永遠顯示在actionbar中,如果屏幕空間不夠,則不顯示;ifRoom,表示屏幕空間夠得話顯示在actionbar中,不夠就顯示在overflow中;never,永遠顯示在overflow中。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
                     ...
        }
        return super.onOptionsItemSelected(item);
    }

運行后,


toolbar-9.PNG

toolbar-10.PNG

通過圖可以發現,Overflow中的選項沒有顯示圖標。這是官方的默認效果,Google認為隱藏在overflow中的Action按鈕都應該只顯示文字。那應該怎樣顯示呢?可以參考郭霖大神的博客:

http://blog.csdn.net/guolin_blog/article/details/18234477

總結

這篇文章是Toolbar的簡單了解和使用。在實際使用中,我們再根據具體需求靈活運用。
ps:寫就是學習的過程。加油!!!

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

推薦閱讀更多精彩內容

  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,489評論 0 17
  • 原文地址:http://www.android100.org/html/201606/06/241682.html...
    AFinalStone閱讀 966評論 0 1
  • 愛多了是負累,是傷害。最好不要欠別人東西,尤其感情,有些感情需要你用這輩子來償還。 會壓的你喘不過氣。會很累。
    喵性少女閱讀 288評論 0 1
  • day41思想的眼睛 要明確自己應該要做什么的前提是要明確自己的目的,這點上報道攝影和紀錄片是有共同之處的。 常見...
    F北落師門閱讀 171評論 0 0