ActionBar

ActionBar

  Android的Title使用的是ActionBar的做法,而并非iOS的Title,因此Google给出了一套ActionBar组件

ActionBar适配所有机型【4.0以下、4.0系列、5.0系列、6.0系列】

  Google给出了一套支持包来协助支持以前的机型。所以开发中可以使用支持包中的ActionBar。

  支持包在SDK->extras->android->support->v7->appcompat

  appcompat这个包中自带V4

加载appcompat类库

  把V7里面的appcompat这个类库加载到你的工作空间里面。

ActionBar基础

创建ActionBar Activity

  • 继承ActionBarActivity【注意全部使用android.support.v7.app包,否则不能支持以前的机器】

  • 注册Activity的时候必须使用样式


<activity android:theme="@style/Theme.AppCompat.Light" ... >

添加 Action Item

  • 设计菜单资源【res/menu】,创建出action Item
  • 在设置菜单项目的时候基本属性有

    • id 定义菜单ID,用于以后的事件
    • icon 定义菜单的图标【大小为64px也就是32dp】
    • title 定义菜单的标题
    • showAsAction 定义菜单的状态 【主要用在ActionBar上】包含的值为:

      • always:这个值会使菜单项一直显示在Action Bar上。
      • ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
      • never:这个值使菜单项永远都不出现在Action Bar上。
      • withText:这个值使菜单项和它的图标,菜单文本一起显示。【withText属性要在横屏时才体现的出来。】

res/menu/act_action_item.xml文件源码



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

    <item
        android:id="@+id/copy"
        android:icon="@drawable/ic_action_copy"
        android:showAsAction="ifRoom"
        android:title="拷贝"/>
    <item
        android:id="@+id/cut"
        android:icon="@drawable/ic_action_cut"
        android:showAsAction="ifRoom"
        android:title="剪切"/>
    <item
        android:id="@+id/discard"
        android:icon="@drawable/ic_action_discard"        
        android:title="删除"/>
    <item
        android:id="@+id/edit"
        android:icon="@drawable/ic_action_edit"        
        android:title="编辑"/>

    <item
        android:id="@+id/newObj"
        android:icon="@drawable/ic_action_new"        
        android:title="新建"/>

</menu>


  • 回调【public boolean onCreateOptionsMenu(Menu menu)】方法,加入设计的action Item
    • 该方法主要构造菜单的方法【这种菜单为选项菜单】
    • 该方法的参数Menu就是菜单对象
    • 该方法返回true则显示该menu,false 则不显示;

    //返回true,才能使得菜单能用,返回false菜单不能用
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        //构造MenuInflater对象
        MenuInflater menuInflater = new MenuInflater(this);
        //使用MenuInflater对象的inflate方法获取菜单的xml文件,然后赋值给Menu对象
        menuInflater.inflate(R.menu.act_action_item, menu);

        //super.onCreateOptionsMenu(menu)会返回true
        return super.onCreateOptionsMenu(menu);
    }

具备物理按键的手机不会出现overflow button或overflow menu,也就是那三个点。可以添加以下代码强制出现三点



    //force to show overflow menu in actionbar for android 4.4 below
    private void getOverflowMenu() {
        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class
                    .getDeclaredField("sHasPermanentMenuKey");
            if (menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }



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


        actionBar = this.getSupportActionBar();
        actionBar.setTitle("ddddddddddd");
        button1 = (Button) this.findViewById(R.id.button1);
        button2 = (Button) this.findViewById(R.id.button2);

        //调用强制出三点按钮
        getOverflowMenu();
    }


添加 Action Item 点击事件

  • 回调【public boolean onOptionsItemSelected(MenuItem item)】 方法,添加每个Action Item的点击事件

    • 该方法为菜单项被点击时调用,也就是菜单项的监听方法。
    • MenuItem参数为每个菜单项对象
    • 如果我们希望将菜单项点击的事件传递下去,继续触发其他处理,则返回false,如果我们认为全部已经处理完,到此为止,不需要将事件传递下去,则返回true。如果采用return super.onOptionsItemSelected(item); 则返回值为flase,即系统缺省返回false。【所以这里需要返回false】


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        switch (item.getItemId()) {
        case R.id.copy:

            //执行copy

            break;
        case R.id.cut:

            //执行cut

            break;
        case R.id.discard:

            //执行discard

            break;
        case R.id.edit:

            //执行edit

            break;
        case R.id.newObj:

            //执行newObj

            break;

        default:
            break;
        }

        return super.onOptionsItemSelected(item);
    }

让 Action Item 显示在底部

  Action Item也可以显示在底部【最多显示5个Action item】需要在AndroidManifest.xml里面找到注册的Activity节点添加一些属性和一个meta-data

  • Activity的属性为:
    • android:uiOptions=”splitActionBarWhenNarrow”
  • meta-data的属性为:
    • android:name=”android.support.UI_OPTIONS”
    • android:value=”splitActionBarWhenNarrow”

        <activity
            android:name="com.hzj.act.Act"
            android:theme="@style/Theme.AppCompat.Light"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.support.UI_OPTIONS"
                android:value="splitActionBarWhenNarrow" />
        </activity>

创建Drop-down Navigation

  • 创建SpinnerAdapter适配器

    //创建SpinnerAdapter适配器
    ArrayAdapter<String> arrayAdapter;
  • 实现ActionBar.OnNavigationListener接口

public class Act extends ActionBarActivity implements ActionBar.OnNavigationListener
  • 在 onCreate()中设置actionBar对象的导航模式

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
  • 在 onCreate()中添加actionBar对象的OnNavigationListener监听器

actionBar.setListNavigationCallbacks(arrayAdapter, this);

完整代码

创建Tabs Navigation

  • 设置ActionBar导航模式

  • 实现ActionBar.TabListener接口

  • 创建 ActionBar.Tab实例

  • 设置 ActionBar.Tab实例的监听器

  • ActionBar添加ActionBar.Tab实例

让 ActionBar出现顶部导航箭头

  • actionBar.setDisplayHomeAsUpEnabled(true);

该导航箭头的作用【不加处理没有任何作用】

  • 可以返回父活动。

    • 需要在AndroidManifest.xml里面注册Activity的时候指明父活动

      • Activity添加一个属性

        • android:parentActivityName=”com.hzj.act.Act2”
      • Activity添加一个meta-data

        • android:name=”android.support.PARENT_ACTIVITY”
        • android:value=”com.hzj.act.Act2”

        <activity
            android:name="com.hzj.act.Act"
            android:parentActivityName="com.hzj.act.Act2"
            android:theme="@style/Theme.AppCompat.Light"
            >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.hzj.act.Act2" />
        </activity>

  • 【未完待续】

ActionBar自定义

ActionBar实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值