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和下拉菜单