在其最基本的形式中,操作栏在一侧显示活动的标题,在另一侧显示溢出菜单。即使在这种基本形式下,应用栏也为用户提供了有用的信息,并使 Android 应用具有统一的外观和风格。
所有使用默认主题的活动都具有ActionBar
作为应用栏。应用栏功能通过各种 Android 版本添加到本机ActionBar
。因此,本机ActionBar
的行为会因设备使用的 Android 版本而异。
另一方面,功能会添加到 AndroidX AppCompat 库的Toolbar
版本中,这意味着这些功能在使用 AndroidX 库的设备上可用。
出于此原因,请使用 AndroidX 库的Toolbar
类来实现活动的应用栏。使用 AndroidX 库的工具栏可确保您的应用在最广泛的设备上保持一致的行为。
向活动添加工具栏
这些步骤介绍了如何将Toolbar
设置为活动的应用栏- 将 AndroidX 库添加到您的项目中,如AndroidX 概述中所述。
- 确保活动扩展
AppCompatActivity
Kotlin
class MyActivity : AppCompatActivity() { // ... }
Java
public class MyActivity extends AppCompatActivity { // ... }
- 在应用清单中,将
<application>
元素设置为使用 AppCompat 的NoActionBar
主题之一,如下例所示。使用这些主题之一可防止应用使用本机ActionBar
类提供应用栏。<application android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
- 向活动的布局添加
Toolbar
。例如,以下布局代码添加了一个Toolbar
,并使其显示为浮在活动上方<androidx.appcompat.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"/>
有关应用栏高度的建议,请参阅Material Design 规范。
由于您将其用作应用栏,因此请将工具栏置于活动布局的顶部。
- 在活动的
onCreate()
方法中,调用活动的setSupportActionBar()
方法并传递活动的工具栏,如下例所示。此方法将工具栏设置为活动的应用栏。Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) // The Toolbar defined in the layout has the id "my_toolbar". setSupportActionBar(findViewById(R.id.my_toolbar)) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); }
您的应用现在拥有一个基本操作栏。默认情况下,操作栏包含应用名称和溢出菜单,该菜单最初包含“设置”项。您可以向操作栏和溢出菜单添加更多操作,如添加和处理操作中所述。
使用应用栏实用程序方法
将工具栏设置为活动的应用栏后,您可以访问 AndroidX 库的ActionBar
类提供的实用程序方法。这种方法可以让您执行一些有用的操作,例如隐藏和显示应用栏。
要使用ActionBar
实用程序方法,请调用活动的getSupportActionBar()
方法。此方法返回对 AppCompat ActionBar
对象的引用。获得该引用后,您可以调用任何ActionBar
方法来调整应用栏。例如,要隐藏应用栏,请调用ActionBar.hide()
。