ActionBar

         简介:ActionBar,又称:活动 条,是Android3.0的重要更新,ActionBar位于传统标题栏的位置,就是屏幕顶部,处于状态栏下面。它可以显示应用程序的图标和当前activity的名称,它的右边部分为活动项,就是提供了一些可以点击的图标,供快捷操作。它的作用主要是以下几点:

  1、显示选项菜单的菜单项,就是右边部分的菜单图标被点击了可以显示菜单项

          2、使用android自身的图标作为返回上一个activity页面或回到手机屏幕主界面的导航操作

          3、可以提供交互式的View自定义actionbar的view

          4、可以制作Tab导航方式,切换多个Fragment

          5、提供基于下拉的导航方式

      使用:要使用actionbar,只需要在Activity引用某个主题就可以了。所有默认的Holo和Material原始主题都包括了ActionBar,AppCompat中也是如此,如下

android下边框一像素问题 安卓下面的条_android下边框一像素问题

android下边框一像素问题 安卓下面的条_ico_02

        如果在项目中不想使用ActionBar可以在activity的主题中应用


android:theme="@style/Theme.AppCompat.NoActionBar"


      或者在activity的代码中获取到ActionBar的实例,然后使用   actionBar.show()和actionBar.hide()方法来动态的显示和关闭ActionBar。

      因为现在的手机中基本都没有了Menu按钮,所以导致现在用户无法打开选项 菜单。为了解决这个问题,ActionBar作为解决方案,可以将选项菜单显示为ActinBar的item。ActionBar的Action item有如下几个方法。

      setShowAsAction(int actionEnum):该方法用来设置该菜单项是否显示在actionbar 上面,作为Actionitem。有如下几个参数:

       1、SHOW_AS_ACTION_ALWAYS: 总是将该MenuItem显示在ActionBar上

       2、SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW: 将该Action View折叠成普通的菜单项

       3、SHOW_AS_ACTION_IF_ROOM: 当ActionBar位置足够时,才显示MenuItem

       4、SHOW_AS_ACTION_NEVER: 不将MenuItem显示在ActionBar上

       5、SHOW_AS_ACITON_WITH_TEXT: 将该MenuItem显示在ActionBar上,并显示该菜单的文本


       然而,实现的项目中我们使用xml资源文件来定义菜单,因此,Android设定了在XML菜单资源文件中卫<item/>元素指定了如下属性

                android:showAsAction: 该属性类似于setShowAsAction( int actionEnum)方法,也支持上面介绍的属性;

         menu设置为如下:


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_send"
        android:icon="@android:drawable/ic_menu_send"
        android:title="发送"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_setting"
        android:orderInCategory="100"
        android:title="设置"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_camera"
        android:title="扫一扫"
        android:icon="@android:drawable/ic_menu_camera"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_delete"
        android:title="删除"
        android:icon="@android:drawable/ic_delete"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_map"
        android:icon="@android:drawable/ic_dialog_map"
        android:title="设置"
        app:showAsAction="never" />
</menu>


  然后开始启用actionbar,这里先介绍ActionBar的几个方法,如下:

id是  android.R.id.home  在点击事件中可以调用activity的finish()方法,来关闭当前activity,也可以调用返回到手机主屏幕的intent,直接关闭应用程序;

      2、setDisplayOptions(int options) : 通过传入int类型常量,来控制该ActionBar的显示选项;

      3、setDisplayShowHomeEnabled(Boolean showHome) ; 设置是否显示应用程序的图标

      4、setHomeButtonEnable(Boolean enabled) :设置是否将应用程序图标转变成可点击的按钮

      5、setIcon(Drawable icon): 设置activity的图标

      6、setLogo(Drawable icon): 设置activity的logo

      7、setTitle(String title): 设置activity的标题

      8、setSubtitle(String subtitle): 设置副标题

下面以acitivity为例,代码如下:


package com.example.myfirst.actionbar;

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        actionBar = getSupportActionBar();
        //设置是否显示应用程序图标
        actionBar.setDisplayShowHomeEnabled(true);
        //将应用图标设为可点击的按钮,并在图标上面添加向左的箭头
        actionBar.setDisplayHomeAsUpEnabled(true);
        //设置应用程序图标为可点击的按钮
        actionBar.setHomeButtonEnabled(true);
        actionBar.setIcon(R.mipmap.ic_launcher);
        actionBar.setTitle("标题");
        actionBar.setSubtitle("副标题");

    }

    /**
     * 创建menu
     * @param menu
     * @return
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = new MenuInflater(this);
        inflater.inflate(R.menu.actioinbar_item,menu);
        return super.onCreateOptionsMenu(menu);
    }

    /**
     * 菜单项被点击了
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.isCheckable()){
            item.setChecked(true);
        }
        switch (item.getItemId()){
            case android.R.id.home:
                Toast.makeText(this,"up按钮被点击了",Toast.LENGTH_LONG).show();
                break;
            case R.id.action_camera:
                Toast.makeText(this,"camera按钮被点击了",Toast.LENGTH_LONG).show();
                break;
            case R.id.action_delete:
                Toast.makeText(this,"delete按钮被点击了",Toast.LENGTH_LONG).show();
                break;
            case R.id.action_send:
                Toast.makeText(this,"send按钮被点击了",Toast.LENGTH_LONG).show();
                break;
            case R.id.action_setting:
                Toast.makeText(this,"setting按钮被点击了",Toast.LENGTH_LONG).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

  效果图如下:

android下边框一像素问题 安卓下面的条_android下边框一像素问题_03

android下边框一像素问题 安卓下面的条_android开发_04


          以上就是actionbar的基本操作,后面会给出actionbar结合listview使用,以及用actionBar制作tab和下拉菜单