ActionBar入门教程

概述

ActionBar,也被称作App Bar,是一个安卓应用程序的一个标准模块,(导航元素),一个Action Bar有以下组成

  • 一个application图标
  • 一个向上的导航,指向逻辑父activity
  • 一个application或者activity标题
  • activity主要的图标
  • 一致的导航(包括navigation drawer )

需要注意的是在3.0之前没有ActionBar。2013年,Google发布了一个支持库,提供了为老版本更好的兼容性,并且支持平板设备。因此下面大部分的例子都依赖于这个支持库,所以请引入AppCompat library.。

基本的ActionBar

每个应用除非特别说明,都有默认的一个ActionBar,默认的ActionBar的标题就是当前activity的名字。
这里写图片描述

改变ActionBar的标题

ActionBar的标题展示在屏幕的顶部,被清单文件的activity 节点所管理。在下面的例子里,FirstActivity会有一个ActionBar,名字是@string/activity_name。注意:application 节点可以有android:label 作为默认,如果activity没有label属性,就会调用activity的lable属性。

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="com.codepath.example.simpleapp.FirstActivity"
            android:label="@string/activity_name" >
        </activity>
</application>

如果你改变android:label 或者android:icon ,就可以改变activity或者整个application的ActionBar的标题和图标。你也可以调用getSupportActionBar()去活的ActionBar的引用,在运行的时候动态改变ActionBar的属性。

ActionBar actionBar = getSupportActionBar(); // or getActionBar();
getSupportActionBar().setTitle("My new title"); // set the top title
String title = actionBar.getTitle().toString(); // get the title
actionBar.hide(); // or even hide the actionbar

你可以改变更多的属性,下一篇会详细介绍。

在新的5.0material 设计规范里,不推荐在ActionBar里使用图标,但你还是可以添加图标

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);

上面的结果是

这里写图片描述

你可以阅读 material design guidelines,里面有谈到“在API21之后,不推荐应用图标+title作为基本的布局”

增加动作条目(Action Item)

如果说你想在ActionBar里增加主要的Action,你把条目加入到目录里,如果合适的编写,他们就会自动的以图标的形式显示在ActionBar的右边。

public class MainActivity extends AppCompatActivity {
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

ActionBar 里的实体通常被成为动作,用这个方法去填充一个菜单资源文件,在这个资源文件里定义了许多动作,例如

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/miCompose"
        android:icon="@drawable/ic_compose"
        app:showAsAction="ifRoom"
        android:title="Compose">
    </item>
    <item
        android:id="@+id/miProfile"
        android:icon="@drawable/ic_profile"
        app:showAsAction="ifRoom|withText"
        android:title="Profile">
    </item>
</menu>

你会注意到了,xmlns:app命名空间必须被指定,因为我们要用showAsAction 选项。原因是:适配库需要用它去支持showAsAction=”ifRoom”选项。这个选项很重要,可以把我们menu里的item以图标的形式显示,如果ActionBar里面没有位置了,就会显示在三个点里面,想必大家都见过。

下面就是我们上面代码的例子

这里写图片描述

注意:@drawable/ic_compose 和@drawable/ic_profil资源在编译的时候必须存在。为了生成ActionBar icons,请使用Android Studio 的Asset Studio。在res/drawable 文件夹右击New -> Image Asset.

处理点击事件

两种方法可以,一是在xml里进行配置

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/item1"
        android:icon="@drawable/ic_compose"
        android:onClick="onComposeAction"
        app:showAsAction="ifRoom"
        android:title="Compose">
    </item>
</menu>

然后定义相对应名字的方法就行

public class MainActivity extends AppCompatActivity {
  public void onComposeAction(MenuItem mi) {
     // handle click here
  }
}

第二种方法就是使用onOptionsItemSelected() 。如何去知道是哪一个menu被点击了呢?调用getItemId()方法就能获得标签的id选项

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.miCompose:
            composeMessage();
            return true;
        case R.id.miProfile:
            showProfileView();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

理解ToolBar

ToolBar在Android L中被引用,在API21中被认为是ActionBar很好的继任者。
ToolBar是一个可以在你布局文件中任意放置的一个ViewGroup 。ToolBar可以更容易的被自定义。

这里写图片描述

在API21之后ToolBar可以很好的工作,安卓也更新了AppCompat 去支持ToolBar在之前的设备商运行。在AppCompat 里,ToolBar是android.support.v7.widget.Toolbar的实现类。我会写一篇文章在介绍ToolBar的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值