当前位置: 代码迷 >> Android >> 学习Android从零开始之ActionBar(活动条)
  详细解决方案

学习Android从零开始之ActionBar(活动条)

热度:238   发布时间:2016-04-24 11:08:37.0
学习Android从0开始之ActionBar(活动条)

 ActionBar

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

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

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

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

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

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

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

        如果在项目中不想使用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的几个方法,如下:

      1、setDisplayHomeAsUpEnabled(Boolean showHomeAsUp):设置是否将应用程序图标转变成可点击的图标,并添加一个向左的箭头。可以监听这个图标的点击事件,点击事件的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);    }}

  效果图如下:


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







 


 







        

                                                                          

  相关解决方案