Android 学习笔记16:Menu 和 action bar

基本的菜单类型有:

选项菜单(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按钮了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值