安卓控件之菜单

安卓控件之菜单

  • OptionsMenu(选项菜单/系统菜单),创建方式:
    • 1) 通过res\menu下的XML文件配置,并在Activity的onCreateOptionsMenu()方法中加载,配置时,应该至少配置id、orderInCategory、title属性
    • 2) 在Activity的onCrateOptionsMenu()方法中,通过参数Menu的add()方法添加
      响应方法:
    • 1) 明确每个菜单项的id
    • 2) 重写Activity的onOptionsItemSelected()方法,对参数MenuItem进行判断后进行响应
  • SubMenu(子菜单),创建方式:
    • 1) 在res\menu下的XML文件中,为一级菜单的节点添加子级 节点,并在 节点下使用若干个节点配置若干个子级菜单,配置方法与一级菜单的配置完全相同
    • 2) 在Activity的onCreateOptionsMenu()方法中,使用addSubMenu()添加出可以存在子级菜单的一级菜单,并获取调用该方法时的返回值,返回值类型为SubMenu,然后通过该返回值继续调用若干次add()方法,以创建若干个子级菜单
    • Ps:菜单项的响应不区分菜单项的级别,所以,子菜单的响应与普通菜单的完全相同
  • ContextMenu(上下文菜单)
    • 特点:上下文菜单是通过长按某个控件后弹出的菜单;上下文菜单必须通过registerForContextMenu()方法注册到控件之上,对应的控件才会有上下文菜单
    • 创建方法:通过重写Activity的onCreateContextMenu()方法可以创建上下文菜单,具体创建过程与创建OptionsMenu相同,可以为多个控件都注册上下文菜单,当创建时,则根据onCreateContextMenu()的第2个参数View判断是由长按了哪个控件导致需要上下文菜单,从而决定创建出不同的菜单项
    • 响应方法:通过重写Activity的OnContextItemSelected()方法可以响应上下文菜单的选择

使用程序创建OptionsMenu和SubMenu:

package cn.myapp.menu;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private static final int MENU_NEW_ID = 100;
    private static final int MENU_OPEN_ID = 200;
    private static final int MENU_SAVE_ID = 300;
    private static final int MENU_CLOSE_ID = 400;
    private static final int MENU_NEW_JAVA_ID = 1001;
    private static final int MENU_NEW_WORD_ID = 1002;
    private static final int MENU_NEW_TEXT_ID = 1003;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getMenuInflater().inflate(R.menu.main, menu);
        SubMenu subMenu = menu.addSubMenu(Menu.NONE, MENU_NEW_ID, 1, "新建");
        subMenu.add(Menu.NONE, MENU_NEW_JAVA_ID, 2, "Java文件");
        subMenu.add(Menu.NONE, MENU_NEW_WORD_ID, 2, "Word文档");
        subMenu.add(Menu.NONE, MENU_NEW_TEXT_ID, 2, "Text文件");

        menu.add(Menu.NONE, MENU_OPEN_ID, 2, "打开");
        menu.add(Menu.NONE, MENU_SAVE_ID, 3, "保存");
        menu.add(Menu.NONE, MENU_CLOSE_ID, 4, "关闭");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // switch (item.getItemId()) {
        // case MENU_NEW_ID:
        // Toast.makeText(this, "New", Toast.LENGTH_LONG).show();
        // break;
        //
        // case MENU_OPEN_ID:
        // Toast.makeText(this, "Open File", Toast.LENGTH_LONG).show();
        // break;
        //
        // case MENU_SAVE_ID:
        // Toast.makeText(this, "Save", Toast.LENGTH_LONG).show();
        // break;
        //
        // case MENU_CLOSE_ID:
        // Toast.makeText(this, "Close", Toast.LENGTH_LONG).show();
        // break;
        // }
        return super.onOptionsItemSelected(item);
    }
    }

—- ——

使用ContextMenu

    package cn.myapp.menu;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Toast;

    public class ContextMenuSampleActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_context_menu_sample);

            registerForContextMenu(findViewById(R.id.imageView1));
        }

        private static final int MENU_SHARE_ID = 10;
        private static final int MENU_SAVE_ID = 20;

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            menu.add(Menu.NONE, MENU_SAVE_ID, 1, "保存");
            menu.add(Menu.NONE, MENU_SHARE_ID, 1, "共享");
            super.onCreateContextMenu(menu, v, menuInfo);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case MENU_SAVE_ID:
                Toast.makeText(this, "即将保存图片", Toast.LENGTH_LONG).show();
                break;

            case MENU_SHARE_ID:
                Toast.makeText(this, "将图片分享给他人", Toast.LENGTH_LONG).show();
                break;
            }
            return super.onContextItemSelected(item);
        }

}

为多个View注册ContextMenu

    package cn.myapp.menu;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Toast;

    public class ContextMenuSampleActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_context_menu_sample);

            registerForContextMenu(findViewById(R.id.imageView1));
            registerForContextMenu(findViewById(R.id.tv_hello_world));
        }

        private static final int MENU_SHARE_ID = 10;
        private static final int MENU_SAVE_ID = 20;
        private static final int MENU_OPEN_URL_ID = 30;
        private static final int MENU_DISPLAY_INFO_ID = 40;

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            switch (v.getId()) {
            case R.id.imageView1:
                // 图片的上下文菜单
                menu.add(Menu.NONE, MENU_SAVE_ID, 1, "保存");
                menu.add(Menu.NONE, MENU_SHARE_ID, 2, "共享");
                break;

            case R.id.tv_hello_world:
                // 文字的上下文菜单
                menu.add(Menu.NONE, MENU_OPEN_URL_ID, 1, "打开图片网址");
                menu.add(Menu.NONE, MENU_DISPLAY_INFO_ID, 2, "查看图片详情");
                break;
            }
            super.onCreateContextMenu(menu, v, menuInfo);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case MENU_SAVE_ID:
                Toast.makeText(this, "即将保存图片", Toast.LENGTH_LONG).show();
                break;

            case MENU_SHARE_ID:
                Toast.makeText(this, "将图片分享给他人", Toast.LENGTH_LONG).show();
                break;
            }
            return super.onContextItemSelected(item);
        }

}

为AdapterView应用ContextMenu,这部分代码很多,请上我的github下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值