從 Android 3.0(API 級別 11)開始,所有使用默認主題的
Activity
均使用ActionBar
作為應(yīng)用欄。不過,經(jīng)過不同 Android 版本的演化,應(yīng)用欄功能已逐漸添加到原生ActionBar
中。因此,原生ActionBar
的行為會隨設(shè)備使用的 Android 系統(tǒng)的版本而發(fā)生變化。相比之下,最新功能已添加到支持庫版本的Toolbar
中,并且這些功能可以在任何能夠使用該支持庫的設(shè)備上使用。
因此,您應(yīng)使用支持庫的
Toolbar
類來實現(xiàn) Activity 的應(yīng)用欄。使用支持庫的工具欄有助于確保您的應(yīng)用在最大范圍的設(shè)備上保持一致的行為。例如,Toolbar
小部件能夠在運行 Android 2.1(API 級別 7)或更高版本的設(shè)備上提供 Material Design 體驗,但除非設(shè)備運行的是 Android 5.0(API 級別 21)或更高版本,否則原生操作欄不會支持 Material Design。
-------- google 官方
用法
向項目中添加Toolbar十分簡單:
- 項目添加v7 appcompat 支持庫;
- Activity繼承自AppCompatActivity;
- 在清單中設(shè)置不需要原生的ActionBar,即
<application android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
- 在xml布局文件中添加
Toolbar
:
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
5.在 Activity 的 onCreate() 方法中,調(diào)用 Activity 的 setSupportActionBar() 方法,然后傳遞 Activity 的工具欄。該方法會將工具欄設(shè)置為 Activity 的應(yīng)用欄。例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
到此就添加完成了。將工具欄設(shè)置為 Activity 的應(yīng)用欄后,您就可以訪問 v7 appcompat 支持庫的 ActionBar 類提供的各種實用方法。您可以通過此方法執(zhí)行許多有用的操作,例如隱藏和顯示應(yīng)用欄。
要使用 ActionBar 實用方法,請調(diào)用 Activity 的 getSupportActionBar() 方法。此方法將返回對 appcompat ActionBar 對象的引用。獲得該引用后,您就可以調(diào)用任何一個 ActionBar 方法來調(diào)整應(yīng)用欄。例如,要隱藏應(yīng)用欄,請調(diào)用 ActionBar.hide()。
添加菜單
簡單的就不多說了,直接上代碼過了:
在res/menu/
目錄中創(chuàng)建一個xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
這里需要注意的是, app:showAsAction
這個屬性,它告訴framework將如何顯示這個菜單Item。never
表示在折疊菜單中展示這個菜單item,ifRoom
表示如果在Toolbar中有足夠展示的空間大小,那么將它在此空間展示出來,反之將它添加到折疊菜單中展示。
看圖大家就明白了: