【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有一个持久的标志。如下图
【Android文档】Training-------Adding the Action Bar_第1张图片

要使用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及以上,如下

    
    ...

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

Adding Action Buttons

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

Specify the Actions in XML

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

    
    
    
    
此处,当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即可。如下


    ...
    
    
        ...
    
    
    
        
        
    

如果是在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:一个白色的主题
你可以在中将主题设定给所有activity,也可以在中将主题指定给某个activity。如下:



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

【Android文档】Training-------Adding the Action Bar_第2张图片

【Android文档】Training-------Adding the Action Bar_第3张图片

【Android文档】Training-------Adding the Action Bar_第4张图片

Customize the Background

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


    
    

    
    

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


使用了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


    
    

    
    

    
    

    
    

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以上)


    
    

Specify Layout Top-margin

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

    ...


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




















你可能感兴趣的:(android,android)