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

来源:互联网 发布:js onready 编辑:程序博客网 时间:2024/05/25 05:36

转载请注明出处 :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参数对象中。如下:

@Overridepublic 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()方法,如下
@Overridepublic 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的图标作为向上返回的按钮,如下:
@Overridepublic 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中的另一篇




















0 0
原创粉丝点击