安卓中菜单的使用

OptionsMenu

OptionsMenu创建方式

1.菜单资源

Menu菜单的属性:
showAsAction 属性共有五个值:ifRoom、never、always、withText、collapseActionView,可以混合使用。

  • ifRoom
    会显示在 Item 中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定
  • never
    永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义 item 的时候,最好把标题都带上。
  • always
    无论是否溢出,总会显示。
  • withText
    withText值示意 Action bar 要显示文本标题。Action bar 会尽可能的显示这个标题,但是,如果图标有效并且受到 Action bar 空间的限制,文本标题有可能显示不全。
  • collapseActionView 一般结合 ifRoom 实现 SearchView 的效果。

命名空间使用app的否则报错。因为当前是V7包的AppCompatActivity
app:showAsAction=”always”

语法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
    <itemandroid:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:numericShortcut="string"
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer"/>
    <groupandroid:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer">
        <item/>
    </group>
    <item>
        <menu>
          <item/>
        </menu>
    </item>
</menu>

2.java代码

//在Activity 中重写该方法 用于创建 OptionMenu。

注意: 官方文档明确说明,该方法必须返回 true 才会创建菜单。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //菜单加载器加载菜单资源
    getMenuInflater().inflate(R.menu.main,menu);
    //java代码动态添加菜单项
    menu.add(Menu.NONE,123,0,"系统设置");
    return true;
}

菜单项点击事件 onOptionsItemSelected()

//选项菜单 Item 的选择时间回调方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_add:
            Toast.makeText(this, "action_add", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

onMenuItemSelected()

该方法是 Activity 的方法。 通用的菜单点击事件回调函数。内部会根据菜单的类型,去调用 onOptionsItemSelected()方法。以及 onContextItemSelected()方法等。

ContextMenu

ContextMenu创建方式

在Activity 中重写该方法来创建 ContextMenu;具体与 OptionsMenu 类似

onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

注意: 上下文菜单可以设置以下属性。

menu.setHeaderIcon(R.drawable.ic_launcher);//设置上下文的图标
menu.setHeaderTitle(“提示!”);//设置上下文的头部标题
menu.setHeaderView(view)//设置上下文的头部 View

上下文菜单项点击事件

在 Activity 中重写该方法 来获取上下文的点击事件回调
onContextItemSelected//获取上下文点击事件

提示: 如果是 ListView 等列表控件注册了上下文菜单,则得到长按的 Item 的位置可以通过以下代码来获取:

AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int position = menuInfo.position;

上下文菜单绑定注册

通过以下方法来为某一个控件 注册上下文菜单。

registerForContextMenu(view);//注册激活上下文菜单的组件

(注意:弹出上下文菜单是长按该组件)

PopupMenu

PopupMenu的创建

PopupMenu popupMenu = new PopupMenu(this, view);//创建 Popup 菜单
//加载 资源菜单 到 PopupMenu
getMenuInflater().inflate(R.menu.my_menu, popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    Toast.makeText(MainActivity.this, item.getItemId(), Toast.LENGTH_LONG).show();
                    return true;
                }
            });
            popupMenu.show();

popupMenu.setOnDismissListener//菜单关闭监听
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值