Android中ActionBar的使用

ActionBar是存在于Activity最上面的部分,可以显示应用的图标和Activity的标题,ActionBar可以作为导航,菜单等ActionItem

ActionBar的使用

注意:此处的ActionBar必须是android.support.v7.app.ActionBar,如果引入的包为android.app则获取不到ActionBar而返回null;

1.使用ActionBar显示选项菜单项

  • 实现方法:

    在菜单文件中,指定item的属性为android:showAsAction="always",在代码中引用该Menu文件并为其设置响应事件即可实现菜单功能

  • showAsAction的属性:

    • always:总是将该Item显示在ActionBar上
    • collapseActionView:将该ActionView折叠成普通的菜单项
    • ifRoom:当ActionBar有足够的空间时才显示出来
    • withText:将Item显示出来,并显示菜单项文本
    • never:不将该Item显示在ActionBar上
  • 图标和title属性

    • 当有图标时会显示图标,没有时则显示title
    • 既没有图标又没有title时不会显示,点击相应区域依然会相应
  • 菜单项可以是普通的菜单项,也可以是上下文菜单项
  • 菜单项XML文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="top.hellowoodes.contextmenu.MainActivity">
    <item  android:title="@string/font_size" android:icon="@mipmap/ic_launcher" android:showAsAction="always|collapseActionView" >
        <menu>
            <group android:checkableBehavior="single">

                <item  android:id="@+id/font_10" android:title="@string/font_10" />
            </group>
        </menu>
    </item>

    <item  android:id="@+id/palin_item" android:title="@string/plain_item" android:showAsAction="always|withText"/>

    <item  android:title="@string/font_color" android:icon="@mipmap/ic_launcher" android:showAsAction="always|withText">
        <menu>
            <group>
                <item  android:id="@+id/red_font" android:title="@string/red_title" />
                <item  android:id="@+id/green_font" android:title="@string/green_title" />
                <item  android:id="@+id/blue_fone" android:title="@string/blue_title" />
            </group>
        </menu>
    </item>
</menu>
  • 在代码中应用该Menu文件以创建菜单项
 public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflator = new MenuInflater(this);
        //装填R.menu.my_menu对应的菜单,并添加到menu中
        inflator.inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

注意:如果在此处使用了getMenuInflater.inflate(R.menu.menu_main,menu)则会将所有菜单显示为折叠菜单的子菜单,而不是逐个显示在ActionBar上

2.使用程序图标导航

  • 设置显示应用图标
        //设置是否显示应用程序图标
        actionBar.setDisplayShowHomeEnabled(true);

        //将应用程序图标设置为可点击的按钮
        actionBar.setHomeButtonEnabled(true);

        //将应用程序图标设置为可点击的按钮,并在图标上添加向左箭头
        actionBar.setDisplayHomeAsUpEnabled(true);
  • 设置向左箭头的响应事件
public boolean onOptionsItemSelected(MenuItem item)
    {
        // 判断单击的是哪个菜单项,并有针对性地作出响应
        switch (item.getItemId())
        {
            case android.R.id.home:
                // 创建启动FirstActivity的Intent
                Intent intent = new Intent(this, FirstActivity.class);
                // 添加额外的Flag,将Activity栈中处于FirstActivity之上的Activity弹出
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                // 启动intent对应的Activity
                startActivity(intent);
                break;
        }
        return true;
    }

3.添加ActionView

  • ActionBar还可以显示普通个UI组件
    • android:actionViewClass:指定ActionView的实现类
    • android:actionLayout :指定ActionView对应的视图文件
  • 在Menu.XML文件中指定ActionView属性
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:id="@+id/search" android:orderInCategory="100" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/>
    <item  android:id="@+id/progress" android:orderInCategory="100" android:showAsAction="always" android:actionLayout="@layout/clock"/>
</menu>
  • 在代码中引用该Menu文件并为其设置响应事件即可实现其功能

你可能感兴趣的:(android,Actionbar,导航,menu,活动条)