您的位置:首页 > 移动开发 > Android开发

Android 学习笔记16:Menu 和 action bar

2014-05-11 01:15 501 查看
基本的菜单类型有:

选项菜单(3.0后通过Action bar实现)

这一部分主要是作用于整个app的菜单选项,如搜索、设置等

创建选项菜单方法:

public boolean onCreateOptionsMenu(Menu menu) {
//设置样式
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


添加菜单按钮被点击时的响应,如果被响应了返回true 否则返回false

//菜单选项第一次显示时的回调函数,3.0以后Activity启动就调用该函数
public boolean onOptionsItemSelected(MenuItem mi){
switch(mi.getItemId()){
//对应的事件
}
return super.onOptionsItemSelected(mi);
}
除此之外还可通过setMenuItemClickListener()方法设置监听器xml中设置android:onclick属性。
如果希望该菜单项是与一个Activity关联的话可以设置setIntent()

上下文菜单

提供一些作用于特定控件或Fragment的操作,经常用在listVIew或GridView中。

实现方式有:

类型一:floating context menu 类似于对话框

创建上下文菜单:

1、为组件注册上下文菜单,如果是listView或GridView就是为它们的每一个Item注册。

TextView txt = (TextView)findViewById(R.id.tv_contextMenu);
//为控件注册上下文菜单
registerForContextMenu(txt);


2、重写onCreatContextMenu()

public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// 设置上下文的样式
getMenuInflater().inflate(R.menu.context, menu);

super.onCreateContextMenu(menu, v, menuInfo);
}


3.定义 事件监听器

//上下文菜单被点击时触发的事件
public boolean onContextItemSelected(MenuItem mi){
switch(mi.getItemId()){
case R.id.green_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.GREEN);
break;
case R.id.red_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.RED);
break;
case R.id.blue_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.BLUE);
break;
}
return true;
}
类型二:上下文操作模式(推荐)
使用情形:1.长按一个item 2.在一个view中选择一个checkbox或者类似控件
设计类型:1.对单独一个view使用 2.对一组listview或gridview中的item使用

弹出菜单

Action Bar

作用:

1.显示应用品牌

2.为应用程序提供导航操作,让用户更容易在不同Activity中切换

3.显示选项菜单

如果3.0之前的版本要使用Actionbar 就需要扩展包

在3.0以上版本Action Bar默认是启用的,如果不想用:

1.在代码中 getActionBar( ).hide( )隐藏Action Bar

2.引用一个不包含操作栏的主题

实现作用一:显示应用品牌 如左上角的微信logo和文字









默认情况logo部分是显示应用程序图标的,我们需要通过setLogo(Drawable logo)设置我们的logo的。

logo与应用程序图标是不同的,应用程序图标的大小是有限制的,且不同的程序版本不同,logo是应用的标志
还可以通过其它函数设置title,控制logo和title的隐藏显示等等

实现作用二:导航功能

把logo当做有先上功能的按钮,这个按钮也手机的返回按钮式有区别的,感觉在弱化菜单和返回按钮的功能,模仿io

actionBar.setHomeButtonEnabled(true);//logo可以像按钮一样点击
actionBar.setDisplayHomeAsUpEnabled(true);//设置先上导航功能

设置返回的Activity有多种方法,最简单的是在manifest中表明当前Activity的parent,或者通过onOptionsItemSelected响应操作

添加导航标签tab,经常与Fragment一起使用。

首先通过setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)设置tab导航
然后通过actiongBat.addTab( )添加tab。如:
actionBar.addTab(actionBar.newTab().setText("好友").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("群聊").setTabListener(this));



Tab的切换时通过TabListener来处理的,一般然Activity实现该接口然后,通过this参数传递
TabLIstener三个回调函数onTabSelected() onTabUnselected() onTabReselected()分别处理选中,未选中,再次选中的事件(结合Fragment再补充)

下拉列表导航(结合spinner再补充)
自定义导航

实现作用三:显示选项菜单

可以在布局文件的Item节点中设置showAsAction属性或者setShowAsAction()方法设置

如果Action Bar没有足够的空间显示选项则这些选项会在overflow menu中出现

1.如果android设备支持菜单按钮,那么点击菜单按钮会显示overflow menu选项

2.不支持的话,Action Bar 右侧会有一个

选项,点击它或者菜单选项按钮就会显示overflow
menu

如果希望强制出现该按钮,可以在Activity的onCreat()方法中加入

try {
ViewConfiguration mconfig = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(mconfig, false);
}
} catch (Exception ex) {
}


该代码是检查设备是否支持菜单按钮,我们设置为不支持,那么就会Action Bar就会显示Overflow menu按钮了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: