现在的位置: 首页 > 综合 > 正文

【译】ActionBar 基础1

2018年02月17日 ⁄ 综合 ⁄ 共 2382字 ⁄ 字号 评论关闭

 

   

    ActionBar是在Honeycomb(3.0版本 )的时候被引入,给我们提供了一个丰富的框架来给用户提供动作和导航。在本篇文章中我们将看看ActionBar的基础知识和简单的实现与快速的运行。
     之前已经提过ActionBar是在Honeycomb(API Lever 11)的时候被引入的,然而借助Jake Wharton所写的优秀的向后兼容类库ActionBarSherlock让ActionBar一样可以支持2.x版本的设备。我将把注意力集中在原生的Android
APIs,但是大部分(即便不是所有)我在本文所涉及的内容你用ActionBarSherlock一样可以很好的工作。

     让一个基本的ActionBar工作真的是很容易。ActionBar取代了一直存在于Android的Options Menu(选项菜单)所提供的功能,所以它扩展了现有的Options Menu框架,仅仅是对标准的Options Menu定义添加额外的参数。一个例子就可以说明这一点远比干解释要强,所以让我们新建一个项目:项目名为BasicActionBar,包名为com.stylingandroid.basicactionbar,最低版本要求3.0(API
11)。如果你用ADT 20引入的创建项目向导(最近,在写这篇文章的时候),我们将会创建一个
空白activity叫做MainActivity、layout叫做main、navigation type导航类型)为none(ADT会自动为我们生成一些菜单,而我们想手动添加这样我们能了解需要哪些操作)、父控件分层(hierarchical
parent)、设置ActionBar Demo 标题(title)。

   如果我们直接运行项目会看到如下界面:
                                                         
      可以看到有一个左侧有图标的标题栏——这就是ActionBar,目前为止我们什么也没做。如果我们点击右侧的垂直省略号(vertical ellipsis)即ActionBar的下拉菜单,我们将看到一个简单的settings选项:
                                           
      这里所看到的都是ADT 20项目向导为我们创建的包含基本ActionBar的项目(如果你用的是早前的ADT版本你将看不到这些)。如果我们查看向导(wizard)为我们创建了什么,我们就会明白为什么会这样。首先让我们看看MainActivity.java:
 
       
public class MainActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

这里的关键在于onCreateOptionsMenu的实现。之前我提及ActionBar是基于旧的Option Menu,这是允许一些向后的兼容。我们仍可以加入一些ActionBar的动作到低于3.0系统的设备,但它们将使用传统的Option Menu来展现(除非我们用ActionBarSherlock)。所以让我们看看菜单的定义,从res/menu/main.xml 载入:

 
 
<menuxmlns:android="http://schemas.android.com/apk/res/android">
    <itemandroid:id="@+id/menu_settings"
        android:title="@string/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never"/>
</menu> 

       可以看到这个菜单定义由一个单一的item组成。id和title的设置一目了然,但另外两个属性是什么意思?通常菜单项会按它们定义时的顺序出现,orderInCategory允许你覆盖这个行为定义自己的顺序。对于ActionBar showAsAction是最关键的属性了,它可以控制菜单项在ActionBar上的放置位置和展现方式。这里设置成never意味着此菜单项不会直接展示在ActionBar上,但会一直出现在下拉菜单上。我不会不厌其烦的全面解释关于这个属性的所有可能值,因为在android开发者网站上它们已经在Menu
Resource
 Adding
Actions
里充分的覆盖到了。
   目前为止我们还未将当用户点击菜单项和触发事件连接起来。但这仅仅是覆写onOptionsItemSelected就可以做到:
@Override
publicbooleanonOptionsItemSelected( MenuItem item )
{
    booleanret;
    if(item.getItemId() == R.id.menu_settings)
    {
        // Handle Settings
        ret = true;
    }
    else
    {
        ret = super.onOptionsItemSelected( item );
    }
    returnret;
} 


这就是我们如何用actionbar实现简单的动作,下篇文章我们将看到如何为actionbar添加导航。
关于本文的代码资源可以在 here获得。

抱歉!评论已关闭.