添加向上操作

应用应该让用户能够轻松地返回应用主屏幕。要实现此目的,最简单的方法是针对除主 Activity 以外的所有 Activity 在应用栏中分别提供一个“向上”按钮。当用户选择“向上”按钮时,应用便会转到父 Activity。

这节课介绍了如何通过在清单中声明 Activity 的父级,并启用应用栏的“向上”按钮,来向 Activity 添加“向上”按钮。

导航架构组件(目前为 Alpha 版)是另一种在应用中处理导航的方法。当用户点击“向上”按钮时,该 API 可以处理从应用的当前屏幕向上导航的操作。若想了解详情,请参阅导航架构组件

声明父 Activity

要在 Activity 中支持向上功能,您需要声明 Activity 的父级。为此,您可以在应用清单中设置 android:parentActivityName 属性。

android:parentActivityName 属性是在 Android 4.1(API 级别 16)中引入的。要支持搭载旧版 Android 的设备,请定义一个 <meta-data> 名称值对,其中名称为 "android.support.PARENT_ACTIVITY",值为父 Activity 的名称。

例如,假设应用有一个名为 MainActivity 的主 Activity 和一个子 Activity。以下清单代码声明了这两个 Activity,并指定了父/子关系:

    <application ... >
        ...

        <!-- The main/home activity (it has no parent activity) -->

        <activity
            android:name="com.example.myfirstapp.MainActivity" ...>
            ...
        </activity>

        <!-- A child of the main activity -->
        <activity
            android:name="com.example.myfirstapp.MyChildActivity"
            android:label="@string/title_activity_child"
            android:parentActivityName="com.example.myfirstapp.MainActivity" >

            <!-- Parent activity meta-data to support 4.0 and lower -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.myfirstapp.MainActivity" />
        </activity>
    </application>
    

启用“向上”按钮

要为具有父 Activity 的 Activity 启用“向上”按钮,请调用应用栏的 setDisplayHomeAsUpEnabled() 方法。通常,您需要在创建 Activity 时调用此方法。例如,以下 onCreate() 方法将 Toolbar 设为 MyChildActivity 的应用栏,然后启用此应用栏的“向上”按钮:

Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_child)

        // my_child_toolbar is defined in the layout file
        setSupportActionBar(findViewById(R.id.my_child_toolbar))

        // Get a support ActionBar corresponding to this toolbar and enable the Up button
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    }
    

Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_child);

        // my_child_toolbar is defined in the layout file
        Toolbar myChildToolbar =
            (Toolbar) findViewById(R.id.my_child_toolbar);
        setSupportActionBar(myChildToolbar);

        // Get a support ActionBar corresponding to this toolbar
        ActionBar ab = getSupportActionBar();

        // Enable the Up button
        ab.setDisplayHomeAsUpEnabled(true);
    }
    

您并不需要在 Activity 的 onOptionsItemSelected() 方法中捕获向上操作。此方法应该调用其父类,如响应操作中所示。此父类方法会根据应用清单的规定,通过导航到父 Activity 来响应“向上”操作。