Android菜单的创建以及使用(详细介绍)
程序员文章站
2022-05-26 20:37:22
...
安卓3.0之前的菜单为
安卓3.0之后的菜单为
创建一个layout,便于演示
菜单的分类:
一:Optionmenu(选项菜单)
一般选项菜单只有两层,否则会影响用户体验
代码演示为:
1.在res目录下先创建一个资源文件夹
2.选择资源类型为menu即可
菜单的代码为:
一般情况下为拖拽添加
其中一个代码为
showAsAction属性值:always :直接在标题栏显示
never:不显示
withText:控制图标和文本一起显示
ifRoom:有空间就显示
有id的作用是为了在代码文件中便于操作
二:Contextmenu(上下文菜单)
长按一个view不放,就会弹出上下文菜单
个人感觉要分为两大块,两大块都能实现上下文菜单,第二大块使用较多用按钮ctx_btn:演示ContextMenu
① 第一块
让其在屏幕的*显示
1.注册registerForContextMenu(findViewById(R.id.ctx_btn));
2.创建 覆盖onCreateContextMenu
3.菜单项的操作 覆盖onContextItemSelected
②第二块
将选项菜单放置在屏幕的上方启动
为按钮设置上下文操作模式
①实现ActionMode CallBack
②在view的长按事件中去启动上下文操作模式
①
ActionMode.Callback cb = new ActionMode.Callback() {
//创建,在启动上下文操作模式(startActionMode(callback))时间调用
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
Log.e("TAG","创建");
getMenuInflater().inflate(R.menu.context,menu);
return true;
}
//在创建方法后进行调用
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
Log.e("TAG","准备");
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
Log.e("TAG","点击");
switch (menuItem.getItemId()){
case R.id.delete:
Toast.makeText(MainActivity.this,"删除",Toast.LENGTH_SHORT).show();
break;
case R.id.opera1:
Toast.makeText(MainActivity.this,"操作1",Toast.LENGTH_SHORT).show();
break;
case R.id.opera2:
Toast.makeText(MainActivity.this,"操作2",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
//上下文操作模式结束时被调用
@Override
public void onDestroyActionMode(ActionMode actionMode) {
Log.e("TAG","结束");
}
};
②
findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
startActionMode(cb);
return false;
}
});
第二块的显示效果为
三:Popupmenu(弹出菜单)
一般绑定在view的下方
//popup_btn:演示PopupMenu
final Button popupBtn = findViewById(R.id.popup_btn);
popupBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//①实例化PopupMenu对象 (参数2:被锚定的view)
final PopupMenu menu = new PopupMenu(MainActivity.this,popupBtn);
//②加载菜单资源:利用MenuInflater将Menu资源加载到PopupMenu.getMenu()所返回的Menu对象中
//将R.menu.xx对于的菜单资源加载到弹出式菜单中
menu.getMenuInflater().inflate(R.menu.popup,menu.getMenu());
//③为PopupMenu设置点击监听器
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.copy:
Toast.makeText(MainActivity.this,"复制",Toast.LENGTH_SHORT).show();
break;
case R.id.paste:
Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
//④千万不要忘记这一步,显示PopupMenu
menu.show();
}
});
}
三种菜单的演示完成
上一篇: HTML5拖放
推荐阅读
-
【Android】Menu不同菜单的使用介绍
-
Android菜单的创建以及使用(详细介绍)
-
详细介绍Android使用Java8新特性之Lambda expression的示例代码
-
mysql索引总结--mysql 索引类型以及创建的详细介绍
-
如何使用微信开发者移动应用创建获取APP ID的详细介绍(图)
-
微信公众平台开发之自定义菜单的创建和删除的详细介绍
-
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,以及如何用来评估ORB-SLAM2生成的轨迹精度
-
如何使用微信开发者移动应用创建获取APP ID的详细介绍(图)
-
mysql索引总结--mysql 索引类型以及创建的详细介绍
-
如何使用DOM创建XML的详细介绍