这篇文章是接着上一篇文章翻译的,建议大家先看看。 添加和处理动作(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 小白翻译选词不够恰当,多多包涵。有疑问或者错误的地方欢迎指出,感激不尽。