zoukankan      html  css  js  c++  java
  • Android menu 简单创建

      在android 中与menu相关的类有4个:

      Menu:菜单的父窗口,用于创建一个菜单,是subMenu,ContentMenu,MenuItem等的父接口;SubMenuyo用于创建子菜单,ContentMenu用于创建上下文菜单,MenuItem用于创建一个菜单项。

      Menu菜单开发的基本思路:1、用onCreateOptionsMenu(Menu menu)(适用于选项菜单,或者用nCreateContentMenu(ContentMenu contentmenu,View source,ContentMenuInfo info)适用于上下文菜单) 创建菜单,在改方法中调用Menu对象的方法来添加菜单项或者子菜单;2、重写Activity的OnOptionsMenuSelected()(适用于选项菜单,OnContentItemSelected()方法,适用于上下文菜单)方法相应事件。

    菜单有3种类型:

    一、选项菜单(普通Menu菜单)

      所谓普通Menu菜单即点击手机Menu键弹出的菜单,简单的创建选项菜单,代码如下:  

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.mainmenu,menu);//通过xml文件创建菜单,其中R.menu.mainmenu问menu文件加下定义的xml文件。

    menu.add(0,0,0,"菜单测试");//用代码添加一个菜单选项
    menu.add(0,1,0,"文本设置");
    SubMenu submenu = menu.addSubMenu(0,6,0,"子菜单测试");//添加一个子菜单
    submenu.add(0,2,0,"我是子菜单1");//添加一个子菜单项
    submenu.add(0,3,0,"我是子菜单2");
    submenu.add(0,4,0,"我是子菜单3");
    return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    //return super.onOptionsItemSelected(item);
    switch(item.getItemId()){
    case 0:
    Toast.makeText(this,"菜单测试",Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this,"文本设置",Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this,"我是子菜单1",Toast.LENGTH_SHORT).show();
    break;
    case 3:
    Toast.makeText(this,"我是子菜单2",Toast.LENGTH_SHORT).show();
    break;
    default:
    Toast.makeText(this,"我是谁?",Toast.LENGTH_SHORT).show();
    break;
    }
    return true;
    }
    }


    二、上下文菜单

      当长按某个控件时弹出的菜单称为上下文菜单(类似单击鼠标右键弹出的菜单),必须事先对该控件注册一个上下文菜单,步骤:

      在activity_main.xml文件中添加一个Button,并对其注册上下文菜单。

      1、对要注册上下文菜单的控件注册上下文菜单,例如registerForContextMenu(button);

      2、重写onCreateContentMenu()方法,并在方法内创建菜单项;

      3、重写onContentItemSelected()方法处理菜单点击事件,

      简单示例代码如下:

      

    public class MainActivity extends AppCompatActivity {
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button);
    registerForContextMenu(btn);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    // super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId() == R.id.button) {
    menu.add(0, 0, 0, "上下文菜单测试");
    menu.add(0, 1, 0, "上下文菜单测试1");
    menu.add(0, 2, 0, "上下文菜单测试2");

    menu.setGroupCheckable(0, true, true);//设置3个菜单项设为单选菜单项
    menu.setHeaderTitle("选择背景颜色"); //设置上下文菜单的标题、图标
    // menu.setHeaderIcon(R.drawable.tt); //设置上下文菜单图标
    }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
    //return super.onContextItemSelected(item);
    switch (item.getItemId()) {
    case 0:
    Toast.makeText(this, "上下文菜单测试", Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this, "上下文菜单测试1", Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this, "上下文菜单测试2", Toast.LENGTH_SHORT).show();
    break;
    default:
    break;
    }
    return true;
    }
    }

    三、弹出式菜单:

      popUpMenu代表弹出式菜单,它会在指定组件上弹出,会显示在该组件的上方或者下方。感觉功能可以用listDialog替代,不知哪个更好。

    Android中创建menu有2种方式:

    一、使用xml定义menu

      在res/menu目录中定义菜单文件,如menu1.xml文件,菜单文件必须以<menu>为根节点,<menu>标签没有任何属性,但可以嵌套在<item>中表示子菜单。

      菜单中常用三个标签<menu>、<item>、<group>,

      1.1 <item>表示一个菜单选项,不可以嵌套,有如下几个常用属性:

        1.1.1 id 表示菜单选项的资源ID,

        1.1.2 tittle设置菜单项标题

        1.1.3 Android:icon设置菜单项图标

        1.1.4 Android:checkable,设置菜单项是否可选;

        1.1.5 Android:checked,设置菜单项是否已经选中

        1.1.5Android:visibale设置菜单项是否课件;

      1.2 <group>元素,用于创建一组菜单项,在创建一个子菜单时使用,常用属性

        Android:checkablebehavior设置所属子菜单项是单选还是多选,值可以是“single”等。

      1.3 开发基本路径

        1.3.1 创建xml文件,新建一个AndroidSourcedirection,名字为menu,并建立好xml文件,

        1.3.2 重写Activity的onCreateOptionsMenu()或者OncreateContentMenu()方法,并在方法中通过getMenuInflater().inflate()方法通过XML构建menu,

        1.3.3 重写onoptionselected()方法或者oncontentitemselected()方法相应事件。

       1.4 代码

          

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id = "@+id/menuid1"
    android:title = "测试1"/>
    <item android:id = "@+id/menuid2"
    android:title = "测试1"/>
    </menu>

    public class MainActivity extends AppCompatActivity {
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button);
    registerForContextMenu(btn);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

    MenuInflater inflator=new MenuInflater(this); //实例化一个MenuInflater对象
    inflator.inflate(R.menu.testmenu, menu); //将xml对应的菜单资源添加到menu中
    //menu.setHeaderIcon(R.drawable.color); //设置上下文菜单图标
    menu.setHeaderTitle("请选择背景颜色"); //设置上下文菜单标题
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
    //return super.onContextItemSelected(item);
    switch (item.getItemId()) {
    case 0:
    Toast.makeText(this, "上下文菜单测试", Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this, "上下文菜单测试1", Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this, "上下文菜单测试2", Toast.LENGTH_SHORT).show();
    break;
    default:
    break;
    }
    return true;
    }
    }
      
     
     
     
     
  • 相关阅读:
    问题14:如何拆分含有多种分隔符的字符串
    问题15:如何判断字符串a是否以字符串b开头或结尾
    问题16:如何调整字符串中文本的格式
    第三方支付公司之快钱
    js实现回调功能实例
    oracle查看未提交事务
    Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案
    oracle错误之未知的命令开头imp忽略了剩余行解决方案
    修改easyui日期控件只显示年月,并且只能选择年月
    数据库三范式大总结
  • 原文地址:https://www.cnblogs.com/llxbl/p/6045042.html
Copyright © 2011-2022 走看看