【Android文档】Training-------Adding the Action Bar

转载请注明出处 :http://blog.csdn.net/chziroy/article/details/44171197

本文主要翻译android开发官网Training中关于ActionBar的几篇文章

Setting up the Action Bar

在大多最基本的格式中,action bar都会呈现activity的标题以及在左侧呈现app的图标。它能使用户知道当前处于哪个activity,并且使该app有一个持久的标志。如下图

要使用action bar需要app的activity使用带有action bar的主题(theme),theme与你的app支持的最低版本有关。本文只讲android3.0以上(API >= 11)的情况。(原文有讲解如何适配3.0以下,窃以为:现在2.3,2.2版本的设备真的太少太少了,有需要的时候再为它们做适配吧,学习的时候直接学习3.0以上的)

Support Android 3.0 and Above Only

从Android3.0(API level 11)开始,所有activity都默认包含action bar,并且这些action bar使用Theme.Holo主题或者其子主题。所以如果想在所有activity中使用action bar,只需将app的targetSdkVersion以及minSdkVersion设置为11及以上,如下

<manifest ... >
    <uses-sdk android:minSdkVersion="11" ... />
    ...
</manifest>

注意,如果你自定义一个主题,该自定义主题需要继承自Theme.Holo。好了,通过以上设置,Theme.Holo主题就被设置到你整个app的所有activity中了。

Adding Action Buttons

action bar上可以添加与当前上下文相关的动作按钮。比较重要的按钮可以直接呈现在action bar上,不够重要的按钮则放在overflow中,如下图

Specify the Actions in XML

要为action bar添加按钮,可以在menu文件夹中新建一个xml文件,在其中定义<item>,如下

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

此处,当action bar控件足够时,Search action按钮将直接呈现在action bar上,而如果Setting action会一直隐藏在overflow中。默认情况所有action都是在overflow中的,但是官方建议最好自己为各个item声明位置。

Add the Actions to the Action Bar

如何将上面声明的menu items添加到action bar呢?你可以实现activity的onCreateOptionMenu()来将某个menu资源文件inflate到该方法的Menu参数对象中。如下:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

Respond to Action Buttons

响应action bar中各个按钮的事件,只需重写activity的onOptionsItemSelected()方法,如下

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_settings:
            openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Add Up Button for Low-level Activities

所有不是app入口的activity都需要提供一个向上返回的功能。如下图

在Android 4.1(API level 16)开始,你只需要在manifest中为activity声明一个parent 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.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        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>

如果是在4.1及以上版本,则只需使用parentActivityName,以上的meta-data是针对4.0及之下的版本。但是为了兼容,其实可以一直都把两个一起写。

然后在activity代码中调用setDisplayHomeAsUpEnabled():,使app的图标作为向上返回的按钮,如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // If your minSdkVersion is 11 or higher, instead use:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}

Styling the Action Bar

Android提供了一些内建的action bar主题,你也可以在这些主题的基础上个性化定制自己的action bar主题

Use an Android Theme

android提供了两个基本的主题

  • Theme.Holo:一个褐色的主题
  • Theme.Light:一个白色的主题

你可以在<application>中将主题设定给所有activity,也可以在<activity>中将主题指定给某个activity。如下:

<application android:theme="@android:style/Theme.Holo.Light" ... />

你也可以使用黑色头部,白色主题的主题:Theme.Holo.Light.DarkActionBar

Customize the Background

一般通过重写主题的background可以自定义action bar的样式,如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.Holo.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@drawable/actionbar_background</item>
    </style>
</resources>

然后将该主题应用到整个app中:

<application android:theme="@style/CustomActionBarTheme" ... />

使用了navigation tabs 或者 split action bar,的action bar,也可以使用 backgroundStacked 和 backgroundSplit指定主题样式。

Customize the Text Color

与修改背景类似,修改字体颜色也只需修改对应属性即可,一般可以修改以下三个

Action bar title:使用titleTextStyle

Action bar tabs:使用 actionBarTabTextStyle

Action buttons:使用 actionMenuTextColor

如下:

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.Holo">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <item name="android:actionMenuTextColor">@color/actionbar_text</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.Holo.ActionBar">
        <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
    </style>

    <!-- ActionBar title text -->
    <style name="MyActionBarTitleText"
           parent="@style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@color/actionbar_text</item>
    </style>

    <!-- ActionBar tabs text styles -->
    <style name="MyActionBarTabText"
           parent="@style/Widget.Holo.ActionBar.TabText">
        <item name="android:textColor">@color/actionbar_text</item>
    </style>
</resources>

Customize the Tab Indicator

主要是讲按下和松开的背景变化,容易理解,但是表述冗长,暂且不写

Overlaying the Action Bar

Action Bar会默认处于activity视图的顶端,一定程度上因此缩小了activity的布局大小。在用户交互过程中,你可以使用ActionBar的hide()或者show()来隐藏或者显示action bar。但是因此会导致系统重新计算activity的大小并重绘。为了避免actionbar在调用hide()或show()时activity的大小发生变化,可以把action bar设置为overlay的模式,该模式下action bar不会占据activity的空间,而是在activity的上层,并可能遮住activity的部分内容。但是这样在activity调用hide()或者show()时就不会改变其大小了。(如果为避免在overlay模式下action
bar会遮住activity的部分内容,可以将action bar设置为透明)

Enable Overlay Mode

使用overlay模式,只需使用android:windowActionBarOverlay属性,将其设置为true即可。如下(本文讲解的所有代码都只针对android3.0以上)

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

Specify Layout Top-margin

如果想在overlay的模式下不让actionbar遮住activity,可以通过设置activity的marginTop或者paddingTop设置为action bar的高度。如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize">
    ...
</RelativeLayout>

先翻译一篇,后面再翻译官网API Guide中的另一篇

时间: 2024-10-25 18:31:46

【Android文档】Training-------Adding the Action Bar的相关文章

Android中文翻译 - Adding the Action Bar 添加活动栏(action bar)

2014-10-28 张云飞VIR 翻译自:https://developer.android.com/training/basics/actionbar/index.html 添加活动栏(Adding the Action Bar) 译者注:我找不到更好的词汇翻译action bar,虽然我也认为 活动栏 不是个好的翻译,但总要有个中文名字.不过为了方便识别,本文仍继续使用英文的actionbar 活动栏action bar 是非常重要的设计元素之一,你可以为你的app中的activity来实

Android文档 学习目录

Building Your First App After you've installed the Android SDK, start with this class to learn the basics about Android app development. Creating an Android Project Running Your Application Building a Simple User Interface Starting Another Activity A

[Android系列—] 4. 添加操作栏(Action Bar)

前言 操作栏是最重要的设计元素之一,使用它来实现你的应用程序活动.通过提供多种用户界面功能, 使应用程序快速和其他的Andorid应用程序一致, 以便被用户熟悉和接受. 主要功能包括: 1. 标识你的应用程序,指示在应用程序的用户的位置. 2. 能很方便的操作重要的功能(像搜索功能) 3. 导航和视图切换功能(使用制表符或下拉列表) 类似的效果如下: 设置操作栏 在基本的使用状况是, 操作栏在左边显示活动的标题和应用的图标. 类似: 设置一个基本的操作栏需要你使用的应用活动主题支持操作栏, 这和

Android文档学习02_屏幕分辨率

应当以矢量图的格式来制作原始图片资源,然后根据下面的缩放尺寸生成每一种分辨率的图片: 特高分辨率xhdpi: 2.0 高分辨率hdpi: 1.5 中分辨率mdpi: 1.0 (基准) 低分辨率ldpi: 0.75 低分辨率(ldpi)的资源并不总是必需的.当你提供高分辨率资源时,系统将把它们对半缩放来适配低分辨率设备. 超大屏幕至少960dp x720dp 大屏幕至少640dp x480dp 标准屏幕至少470dp x320dp 小屏幕至少426dp x320dp 维护密度无关系性很重要,因为,

Android文档学习01_Android基础

一旦安装到了一个设备,每个应用生存在它自己的安全沙箱 系统给每个应用分配一个独立的Linux用户ID(这个ID只由系统使用并且对应用来说是不可知的) Android系统实现了最小特权原则.默认,每个应用仅仅访问需要工作的组件,并不多做其他的事.这样创建了一个非常安全的环境,应用不能访问系统没有授权的其他部分 有可能安排两个应用共用一个linux系统ID,在那种情况下,它们能互相访问相互的数据.为了节约系统资源,拥用相同用户ID的应用,可能也被安排运行在同一个Linux进程中并共享相同的VM(应用

解决访问本地Android文档很慢的问题

在天朝时不时的就不能访问Android开发网站了,要想查看开发文档,真是费劲心思,这里不再介绍访问Android开发网站developer.android.com,这里介绍如何快速的访问打开本地的SDK下Android文档 原因: 打开本地的SDK下文档访问依然很慢,究其原因是文档里面的页面很多都有css和js的http连接,Google是通过动态获取的,这里会进行http访问,但是我们又无法无法正常连接这些网址链接,所以会导致很慢. 解决方法: 这里为了让Android不连网,方法很多,可以用

【Android界面实现】Overlaying the Action Bar

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本篇文章翻译自http://developer.android.com/training/basics/actionbar/overlaying.html,想查看原文的同学可以自己翻墙看. 默认的,ActionBar会出现在你的Activity的窗口上面,这样可能会减少剩下的Activity的可见区域的大小.如果,在用户的交互的过程中,你想要隐藏或者是展示ActionBar,你可以通过hide()或者是s

【Android界面实现】Styling the Action Bar

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本篇文章翻译自Android开发者网站,但并不是完全按照原意翻译,添加了我个人的一些理解.想看原文的请戳:http://developer.android.com/training/basics/actionbar/styling.html ActionBar控件,可以为我们的App提供一致的导航体验,用户使用起来更加的方便和熟悉,降低用户的学习成本,但是这并不意味着我们要和其他的App使用完全一样的Ac

Adding the Action Bar

http://www.cnblogs.com/gcg0036/p/4321263.html 设置基本操作栏,要求应用程序使用适合该操作栏的活动主题.如何申请这样的主题取决于应用程序能支持的最低安卓版本. 从Android3.0(API级别11)开始,操作栏包含在所有使用 Theme.Holo主题(或者它的子类)的活动中.无论是 targetSdkVersion 还是minSdkVersion,当把属性设置为11或者更大时Theme.Holo是默认的主题. 注意:如果您已经创建了自定义主题,要确保