ActionBar入门教程

来源:互联网 发布:人工智能 在线课程 编辑:程序博客网 时间:2024/05/16 10:52

概述

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 titleString title = actionBar.getTitle().toString(); // get the titleactionBar.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选项

@Overridepublic 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的。

0 0