文档章节

Menu菜单

火文乐武
 火文乐武
发布于 2016/05/04 21:12
字数 1026
阅读 10
收藏 0

Menu(菜单)

1.选项菜单(Options)
    java代码创建选项菜单,只需要重写onCreateOptionsMenu方法

     onCreateOptionsMenu(Menu menu){
            menu.add(Menu.NONE, 1, Menu.NONE, "菜单1");
     }

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    
        /*groupId  分组的id编号  如果不需要可以设置Menu.NONE
         * itemId  必须要设置的  菜单项id 唯一标示这个菜单
         * order   菜单排序      如果不需要可以设置Menu.NONE
         * title   菜单显示的文字
         *  MenuItem android.view.Menu.add(
         *  int groupId, int itemId, int order, CharSequence title)
         * */
        menu.add(Menu.NONE, 1, Menu.NONE, "菜单1");
        menu.add(Menu.NONE, 2, Menu.NONE, "菜单2");

        return super.onCreateOptionsMenu(menu);
    }

     带子菜单
    onCreateOptionsMenu(Menu menu){
            SubMenu sub = menu.addSubMenu("字体大小")
            sub.add(Menu.NONE, 1, Menu.NONE, "菜单1");
     }   

 1.2 只能弹出对话框,不能实现内容的更改

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //使用java代码设置选项菜单 
        //SubMenu 创建子菜单
        SubMenu subMenu1 = menu.addSubMenu("字体大小");
        //添加子菜单内选项
        subMenu1.setHeaderTitle("请选择字体大小");
        subMenu1.add(Menu.NONE, 1, Menu.NONE, "14号字体");
        subMenu1.add(Menu.NONE, 2, Menu.NONE, "16号字体");
        
        SubMenu subMenu2 = menu.addSubMenu("字体颜色");
        subMenu2.setHeaderTitle("请选择字体颜色");
        subMenu2.add(Menu.NONE, 4, Menu.NONE, "红色");
        subMenu2.add(Menu.NONE, 5, Menu.NONE, "绿色");
        return true;
    }

    xml资源文件创建选项菜单    
        在menu(自己创建)文件夹下创建main.xml
        <item>  <menu>

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

        <item
            android:id="@+id/font"
            android:title="字体大小">
            <menu >
                <item
                    android:id="@+id/f14"
                    android:title="14号字体"/>
                <item
                    android:id="@+id/f16"
                    android:title="16号字体"
                    />
                <item
                    android:id="@+id/f18"
                    android:title="18号字体"
                    />
            </menu>            
        </item>

        <item
            android:id="@+id/color"
            android:title="字体颜色"
            >
            <menu >
                <item
                    android:id="@+id/red"
                    android:title="红色"
                    />
                <item
                    android:id="@+id/greed"
                    android:title="绿色"
                    />
                <item
                    android:id="@+id/blue"
                    android:title="蓝色"
                    />
            </menu>            
        </item>
</menu>

    怎么把menu资源关联到java代码的menu对象
        getMenuInflater().inflate(menuRes, menu)    
        menuRes:自己创建的main.xml  
        menu:参数

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //菜单填充器 把资源文件(menu/main.xml)填充到menu对象中
        //使用menu资源文件设置选项菜单(推荐使用资源文件)
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

   设置监听事件onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item) {       
        switch (item.getItemId()) { 
        case R.id.f14: 
            textView.setTextSize(14);
         break; 
         case R.id.f16:
             textView.setTextSize(16);
         break; 
         case R.id.f18: 
             textView.setTextSize(18);
         break;
          case R.id.red:
              textView.setTextColor(Color.RED);
          break;
          case R.id.greed:
              textView.setTextColor(Color.GREEN);
          break; 
          case R.id.blue:
              textView.setTextColor(Color.BLUE);   
          break;
          }
          return super.onOptionsItemSelected(item);
          }

 上下文菜单(Context)
         每个Activity有且只有一个选项菜单(OptionsMenu),而一个Activity中包含多个View,每一个view控件
         都可以注册一个上下文菜单
    
        registerForContextMenu(控件对象);
      

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = (TextView) findViewById(R.id.tv);
        
        //给控件注册一个上下文菜单
        registerForContextMenu(textView);
    }

           点击(使劲按)绑定注册上下文的控件
            onCreateContextMenu(){}
      

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        System.out.println("上下文菜单被调用了。。。。");
        
        menu.setHeaderIcon(R.drawable.ic_launcher);
        menu.setHeaderTitle("请设置颜色");
        menu.add(Menu.NONE, 1, Menu.NONE, "红色");
        menu.add(Menu.NONE, 2, Menu.NONE, "绿色");
        menu.add(Menu.NONE, 3, Menu.NONE, "蓝色");

        
    }            选择菜单项触法的监听事件
            onContextItemSelected(){}
  

 @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 1:
            textView.setBackgroundColor(Color.RED);
            break;
        case 2:
            textView.setBackgroundColor(Color.GREEN);
            break;
        case 3:
            textView.setBackgroundColor(Color.BLUE);
            break;
        }
        return super.onContextItemSelected(item);
    }

    
   弹出式菜单 (Popup)
            1.创建PopupMenu对象
                PopupMenu  p = new PopupMenu(context,控件的对象);

        PopupMenu popupMenu = new PopupMenu(this, btn);

   2.创建menu资源文件 绑定PopupMenu
            2.1menu资源:在和layout同等级的位置新建menu文件夹,然后建立main.XML

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/find"
        android:title="查找"/>
    <item
        android:id="@+id/del"
        android:title="删除"/>
    <item
        android:id="@+id/add"
        android:title="添加"/>
</menu>

            2.2 绑定PopupMenu

getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());

            3.setOnMenuItemClickListener 设置监听事件

popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            
            @Override
            public boolean onMenuItemClick(MenuItem item) {  
                switch (item.getItemId()) {
                case R.id.find:
                    Toast.makeText(MainActivity.this, "点击了查找按钮", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.del:
                    Toast.makeText(MainActivity.this, "点击了删除按钮", Toast.LENGTH_SHORT).show();
                    break;
                }
                return false;
            }
        });

4.调用show()显示弹出菜单

popupMenu.show();

实现数据的删除

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.lv);
        
        data = new ArrayList<>();
        data.add("北京");data.add("上海");data.add("深圳");data.add("郑州");
        data.add("北京1");data.add("上海1");data.add("深圳1");data.add("郑州1");
        
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,data);
        listView.setAdapter(adapter);
        
        //1.给控件注册上下文菜单
        registerForContextMenu(listView);
    }    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(Menu.NONE, 1, Menu.NONE, "删除");
        //获取适配器相关的数据
        AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
        pos= info.position;
        
    }
    
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        String cityName = data.get(pos);
        data.remove(cityName);
        adapter.notifyDataSetChanged();
        
        return super.onContextItemSelected(item);
    }



© 著作权归作者所有

共有 人打赏支持
火文乐武
粉丝 7
博文 38
码字总数 17183
作品 0
郑州
Android工程师
私信 提问

暂无文章

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
19分钟前
1
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
44分钟前
0
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
6
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部