FC 2.2.5 在活动中使用菜单Menu

  • 添加方式
    • 静态添加(引入xml)
    • 动态添加(代码里写菜单)
  • 菜单
    •  选项菜单,OptionsMenu,每个Activity只有一个
    • 子菜单,SubMenu
    • 上下文菜单,ContextMenu,长按视图控件后出现的菜单

 

选项菜单

1、在res目录下新建一个menu文件,右击res目录 NEW Directory,输入人文件夹名menu,点击ok,在这个文件夹下新建名为main的菜单文件,即右击menu,NEW resourse file,文件名输入main,点击OK完成创建,然后在这个main.xml里添加如下代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_item"
        android:title="Add" />
    <item android:id="@+id/remove_item"
        android:title="Remove"/>
</menu>

2、在Activity中重写 onCreateOptionsMenu()方法和 onOptionsItemSelected()方法

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        /**
         * 第一个参数:通过哪个资源文件来创建菜单
         * 将菜单添加到哪个menu对象中
         */
        getMenuInflater().inflate(R.menu.main, menu);
        return true;//true表示菜单显示出来,false表示菜单不显示
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {//定义响应事件
            case R.id.add_item:
                Toast.makeText(MainActivity.this, "add_item", Toast.LENGTH_SHORT).show();
            case R.id.remove_item:
                Toast.makeText(MainActivity.this, "remove_item", Toast.LENGTH_SHORT).show();
        }
        return true;
    }

子菜单

1、首先创建menu2.xml文件,与上一个创建步骤相同,不过代码不同,双层menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/file"
        android:title="文件"
        >
        <menu>
            <item
                android:id="@+id/file_new"
                android:orderInCategory="100"
                android:title="新建"
                >
            </item>
            <item
                android:id="@+id/file_open"
                android:orderInCategory="100"
                android:title="打开"
                >
            </item>
            <item
                android:id="@+id/file_s"
                android:orderInCategory="100"
                android:title="保存"
                >
            </item>
        </menu>
    </item>

    <item
        android:id="@+id/edit"
        android:title="编辑"
        >
        <menu>
            <item
                android:id="@+id/edit_c"
                android:orderInCategory="100"
                android:title="复制"
                >
            </item>
            <item
                android:id="@+id/edit_v"
                android:orderInCategory="100"
                android:title="粘贴"
                >
            </item>
            <item
                android:id="@+id/edit_x"
                android:orderInCategory="100"
                android:title="剪切"
                >
            </item>
        </menu>
    </item>
</menu>

2、然后在Activity中对菜单进行显示并添加单击事件。

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu2,menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.edit_c:
                Toast.makeText(SecondActivity.this, "edit_c", Toast.LENGTH_SHORT).show();
            case R.id.edit_v:
                Toast.makeText(SecondActivity.this, "edit_v", Toast.LENGTH_SHORT).show();
            //这里省略剩下的四个
        }
        return true;
    }

上下文菜单

1、创建menu3.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_item"
        android:title="复制" />
    <item android:id="@+id/remove_item"
        android:title="粘贴"/>
</menu>

2、重写onCreateContextMenu方法

3、为控件(listview)注册ContextMenu

public class ThirdActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter<String> adapter;
    private String[] data = {"1", "2", "3"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        listView = (ListView) findViewById(R.id.list);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, data);
        listView.setAdapter(adapter);
        registerForContextMenu(listView);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.menu3, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }
}

 

以上三个菜单,均使用的静态添加,接下来动态添加菜单

方法是menu.add()并提供四个参数(groupId,itemId,order,title), 其中itemId和title对应了xml中Item的id和title,groupId用来分组的Id,order是菜单项用来排序的。

选项菜单:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(1, 1, 1, "设置1");
        menu.add(1, 2, 2, "设置2");
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {//定义响应事件
            case 1:
                Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }

子菜单

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        SubMenu sub1 = menu.addSubMenu("sub1");
        sub1.add(1, 1, 1, "sub1_sub1");
        sub1.add(1, 2, 1, "sub1_sub2");
        sub1.add(1, 3, 1, "sub1_sub3");
        SubMenu sub2 = menu.addSubMenu("sub2");
        sub2.add(2, 1, 1, "sub2_sub1");
        sub2.add(2, 2, 1, "sub2_sub2");
        sub2.add(2, 3, 1, "sub2_sub3");
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getGroupId() == 1) {
            switch (item.getItemId()) {
                case 1:
                    Toast.makeText(FiveActivity.this, "sub1_sub1", Toast.LENGTH_SHORT).show();
                    break;
                //省略剩下的两个
            }
        } else if (item.getGroupId() == 2) {
            //省略剩下的三个
        }
        return super.onOptionsItemSelected(item);
    }

上下文菜单

public class SixActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter<String> adapter;
    private String[] data = {"1", "2", "3"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_six);
        listView = (ListView) findViewById(R.id.six_list);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, data);
        listView.setAdapter(adapter);
        registerForContextMenu(listView);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("操作");//添加菜单的标题
        SubMenu sub1 = menu.addSubMenu("sub1");
        sub1.add(1, 1, 1, "sub1_sub1");
        sub1.add(1, 2, 1, "sub1_sub2");
        sub1.add(1, 3, 1, "sub1_sub3");
        SubMenu sub2 = menu.addSubMenu("sub2");
        sub2.add(2, 1, 1, "sub2_sub1");
        sub2.add(2, 2, 1, "sub2_sub2");
        sub2.add(2, 3, 1, "sub2_sub3");
        super.onCreateContextMenu(menu, v, menuInfo);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值