添加一个向前导航的动作(Adding an Up Action)

这篇文章是接着上一篇文章翻译的,建议大家先看看。 添加和处理动作(Adding and Handling Actions)

今天这篇文章比较短,也比较简单。原文地址是:http://developer.android.com/intl/zh-cn/training/appbar/up-action.html#enable-up
下一篇翻译的链接地址 动作视图和动作提供器(Action Views and Action Providers)闲话少说,开始翻译。

你的应用应该让用户方便的回到应用的主界面。一个简单的方法是给所有的activity(除了主activity)在应用栏上添加一个向前导航的按钮。当用户选择了这个按钮的时候,应用就回到当前activity的父activity。

这节课教你如何通过在mainifest文件中为当前activity声明一个父activity,来给activity添加向前导航的按钮并使其起作用。

声明一个父activity(Declare a Parent Activity)

为了使当前activity能够向前导航,你需要为这个activity声明一个父activity。你可以在应用的manifest文件中,通过设置android:parentActivityName属性来实现。

android:parentActivityName 这个属性是从Android4.1(API16)开始引进的。为了支持运行低版本安卓系统的手机,可以在activity标签下面定义一个键值对。键是”android.support.PARENT_ACTIVITY”,值是父Activity的名字。

例如,假设你的应用有一个叫MainActivity的activity和一个子activity。下面的说明代码声明了两个activity并指明了父子关系。

<application ... >
    ...

    <!-- 主Activity (它没有父Activity) -->

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

    <!-- 主Activity的一个子Activity -->
    <activity
        android:name="com.example.myfirstapp.MyChildActivity"
        android:label="@string/title_activity_child"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >

        <!-- 支持Android 系统4.0或更低版本的父Activity的键值对 -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

起用向前导航按钮(Enable the Up Button)

通过调用应用栏的setDisplayHomeAsUpEnabled()方法,就可以为一个拥有父activity的activity启用向前导航的功能。需要注意的是,当activity创建完成的时候你就应该调用这个方法。例如,下面的onCreate()方法为MyChildActivity设置了一个toolbar作为应用栏,并启用了向前导航按钮。

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

    // my_child_toolbar 已经在布局文件中定义了一个Toolbar 控件
    Toolbar myChildToolbar =(Toolbar) findViewById(R.id.my_child_toolbar);

    setSupportActionBar(myChildToolbar);

    // 得到与ToolBar对应的Actionbar
    ActionBar ab = getSupportActionBar();

    // 启用向前导航按钮
    ab.setDisplayHomeAsUpEnabled(true);
}

在Activity的onOptionsItemSelected()方法中,你不需要处理向前导航按钮事件。onOptionsItemSelected()方法应该调用父类的方法(就像在上一篇翻译中响应Actions中描述的那样)。它的父类的方法会导航当前activity回到父activity–在应用的manifest文件中声明的父activity。

上面就是这篇文章的翻译内容,接下来我在实践中检验。

1.我在工程中新建了两个Activity,一个是MainActivity,一个是ChildActivity。(前面翻译的两篇文章都是使用的MainActivity),先看一下我的AndroidManifest文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.learntoolbar">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ChildActivity"
            android:label="@string/title_activity_child"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
    </application>

</manifest>

没什么好说的,就是启动MainActivity,并把MainActivity设为ChildActivity的父Activity。
在父布局中添加一个按钮,当点击这个按钮的时候跳转到ChildActivity。代码就不贴全了。

btnStartChildActivity = (Button) findViewById(R.id.btnStartChildActivity);
        btnStartChildActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //启动子Activity
               startActivity(new Intent(MainActivity.this,ChildActivity.class));
            }
        });

在ChildActivity的布局文件activity_child中添加一个ToolBar控件作

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.learntoolbar.ChildActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/child_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"
        />
</android.support.design.widget.CoordinatorLayout>

ChildActivity.java文件

package com.learntoolbar;

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class ChildActivity extends AppCompatActivity {

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

        ActionBar actionBar=getSupportActionBar();

        //一句话搞定
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

}

这里写图片描述

结尾:关于Toolbar的翻译估计还有1篇或者2篇。我会继续翻译。因为we我也是个Android 小白翻译选词不够恰当,多多包涵。有疑问或者错误的地方欢迎指出,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值