从 Android 3.0(API 级别 11)开始,所有使用默认主题的
Activity
均使用ActionBar
作为应用栏。不过,经过不同 Android 版本的演化,应用栏功能已逐渐添加到原生ActionBar
中。因此,原生ActionBar
的行为会随设备使用的 Android 系统的版本而发生变化。相比之下,最新功能已添加到支持库版本的Toolbar
中,并且这些功能可以在任何能够使用该支持库的设备上使用。
因此,您应使用支持库的
Toolbar
类来实现 Activity 的应用栏。使用支持库的工具栏有助于确保您的应用在最大范围的设备上保持一致的行为。例如,Toolbar
小部件能够在运行 Android 2.1(API 级别 7)或更高版本的设备上提供 Material Design 体验,但除非设备运行的是 Android 5.0(API 级别 21)或更高版本,否则原生操作栏不会支持 Material Design。
-------- google 官方
用法
向项目中添加Toolbar十分简单:
- 项目添加v7 appcompat 支持库;
- Activity继承自AppCompatActivity;
- 在清单中设置不需要原生的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() 方法中,调用 Activity 的 setSupportActionBar() 方法,然后传递 Activity 的工具栏。该方法会将工具栏设置为 Activity 的应用栏。例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
到此就添加完成了。将工具栏设置为 Activity 的应用栏后,您就可以访问 v7 appcompat 支持库的 ActionBar 类提供的各种实用方法。您可以通过此方法执行许多有用的操作,例如隐藏和显示应用栏。
要使用 ActionBar 实用方法,请调用 Activity 的 getSupportActionBar() 方法。此方法将返回对 appcompat ActionBar 对象的引用。获得该引用后,您就可以调用任何一个 ActionBar 方法来调整应用栏。例如,要隐藏应用栏,请调用 ActionBar.hide()。
添加菜单
简单的就不多说了,直接上代码过了:
在res/menu/
目录中创建一个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中有足够展示的空间大小,那么将它在此空间展示出来,反之将它添加到折叠菜单中展示。
看图大家就明白了: