Android--菜单详解
来源:互联网 发布:安卓 网络加速器 编辑:程序博客网 时间:2024/05/16 09:42
Android中的菜单分为三种,即选项菜单(系统菜单),上下文菜单和弹出式菜单。
选项菜单:
一个activity只有一个选项菜单,选项菜单的创建方式有低版本创建和高版本创建两种。最常用的是干版本创建,所以这里着重高版本的创建方式的介绍。
创建步骤:
1, 在res/menu/文件夹中xml 中定义每个菜单项
<item
android:id =" 菜单中每个Item的id"
android:title="每个Item 文本信息"
android:orderInCategory :Menu中显示的顺序,数字越小, 越在前面显示, 如果数字一样, 先写那个 那个就在前面位置显示
android:showAsAcrtion:设置Menu何时和怎样显示在Action Bar中。
其中属性值:never : 永远都不显示在Action Bar中
always : 一直显示在Action Bar中
ifRoom : 如果有空间 则显示在Action Bar中
/>
2, 在activity中 显示菜单项
重写父类的方法:
onCreateOptionsMenu(Menu menu)
{
//加载菜单
getMenuInflater.inflat(R.menu.main,menu);
}
3, 在activity中 每个菜单项实现点击
重新父类的方法:
onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.action_red:
.......
break;
}
}
低版本创建:
//低版本的创建 /**
* groupId 分组ID
* itemId 菜单项的Id
* order 排序
* title 菜单显示的文字
*/
menu.add(menu.NONE, MENU_ONE, menu.NONE, "代码创建的菜单");
//带有子菜单的一级菜单
SubMenu subMenu = menu.addSubMenu(menu.NONE, 2, menu.NONE, "sub 1");
subMenu.add(menu.NONE, 21, 1, "sub 1-1");
subMenu.add(menu.NONE, 22, 2, "sub 1-2");
subMenu.add(menu.NONE, 23, 0, "sub 1-3");
实例:
public class MainActivity extends Activity {private TextView t;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);t = (TextView) findViewById(R.id.t);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.red:t.setTextColor(Color.RED);t.setTextSize(12);break;case R.id.green:t.setTextColor(Color.GREEN);t.setTextSize(22);break;case R.id.blue:t.setTextColor(Color.BLUE);t.setTextSize(32);break;}return super.onOptionsItemSelected(item);}
<item android:id="@+id/ACTION_COLOR" android:title="选择颜色"> <menu > <group > <item android:id="@+id/red" android:title="红色" /> <item android:id="@+id/green" android:title="绿色" /> <item android:id="@+id/blue" android:title="蓝色" /> </group> </menu> </item>
上下文菜单:
ContextMenu 和OptionsMenu的区
1, OptionsMenu 的拥有者是Activity; ContextMenu 上下文菜单的拥有者是Activity中View
2, 每个Activity中有且只有一个OptionsMenu,它为整个Activity服务; 每个Activity中可以有多个View, 那个View需要显示上下文菜单 需要为该View注册上下文菜单registerForContextMenu(View view);
创建方式
1, 注册上下文菜单
2, res/menu/文件中的 创建每个Item项
3, 重写父类方法: onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo)
/**
* 当长按View时调用
*
* ContextMenu menu 需要显示的上下文菜单
* View v 用户选择的View
* ContextMenuInfo menuInfo 所选择界面的额外信息
* (Spinner,ListView,GridView)
* 携带这AdapterView 的 posotion信息
--菜单可见--
4, 实现菜单项的点击: 重写父类的方法: onContextItemSelected(MenuItem item)
实例:
public class MainActivity extends Activity {private ListView lv;private List<String> data = new ArrayList<String>();private ArrayAdapter<String> adapter;private int position = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) findViewById(R.id.lv);for (int i = 0; i < 20; i++) {data.add("Item --->" + i);}adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);lv.setAdapter(adapter);// 1, 注册上下文对象registerForContextMenu(lv);}// 2, 在res/menu/中创建菜单项// 3, 重写父类的方法, 实现显示@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);// 加载菜单页面 getMenuInflater().inflate(R.menu.main, menu);// 获取当前选中ListView的Item的下标position = ((AdapterContextMenuInfo) menuInfo).position;}// 4, 重写父类的方法, 实现每个菜单项的点击@Overridepublic boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_delete:// 从数据源中移除数据data.remove(position);// 刷新适配器adapter.notifyDataSetChanged();break;}return super.onContextItemSelected(item);}}
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_delete" android:orderInCategory="100" android:showAsAction="never" android:title="删除信息"/></menu>
弹出菜单:
Popup Menu 弹出式菜单 Api 必须在11以上, 可以为任意View 创建弹出式菜单
1, 得到PopupMenu的对象
PopupMenu pMenu = new PopupMenu(this,位置参考的UI控件);
2, 加载菜单
getMenuInflater.inflat(R.menu.main,menu);
3, 为PopupMenu设置监听器
pMenu.setOnMenuItemClickListener(.....);
4, 显示菜单
pMenu.show();
实例:
public class MainActivity extends Activity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);}// 点击按钮弹出菜单public void change(View v) {// 得到popup对象PopupMenu popupMenu = new PopupMenu(MainActivity.this, v);// 加载菜单getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());// 为 popup设置监听器popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case R.id.action_color:tv.setTextColor(Color.CYAN);break;case R.id.action_size:tv.setTextSize(20);break;}return false;}});// 显示popupMenu.show();}}
- Android---菜单详解
- android菜单详解
- Android菜单详解
- Android菜单详解
- Android菜单详解
- android Menu菜单详解
- Android menu菜单详解
- android菜单详解
- android菜单详解
- Android菜单详解
- Android--菜单详解
- Android中的菜单详解
- android菜单详解二:选项菜单
- android菜单详解三:上下文菜单
- android菜单详解四:子菜单
- android菜单详解二:选项菜单
- android菜单详解三:上下文菜单
- android菜单详解四:子菜单
- Cpp环境【CQYZOJ1496】【Code[VS]5287】搬家大冒险
- 【JZOJ 3053】旅行
- 观察者模式
- 湖南省第十二届大学生计算机程序设计竞赛 J 三角形和矩形 半平面交
- 计算机发展及系统
- Android--菜单详解
- 用print在canvas自定义View实现飘雪花,多色雪花功能。
- 如何使用SSH登录远程服务器
- 缓存数据库redis安装
- LeetCode 13 -- Roman to Integer
- [BZOJ4658]rescue
- JZOJ【3072】【NOIP2012模拟10.31】掷骰子
- unity - 对象池技术的实现与应用
- UVa OJ 11093 - Just Finish it up