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的几个方法,如下:
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和下拉菜单
|