首页 > 代码库 > 第二章 吸引你的眼球—UI编程(8)

第二章 吸引你的眼球—UI编程(8)

2.4 Menu键的呼唤—Menu菜单

使用Android手机的朋友应该对手机的“Menu”键都不陌生吧。它使用起来方便、快捷,不需要占用应用的界面,正因为它的这些特性,我们现在有很多的应用都使用了Menu-菜单键。

Menu菜单有好几种类型,它们各有各的展现形式,分别使用在不同的场合,以下我们逐一对它们进行介绍。

 

1)普通的Menu(选项菜单)

    这是我们平时使用最多、也是最常见的菜单,它就是当用户单击设备上的菜单按键时弹出的菜单。它最多只能显示6个,超过6个则第六个自动显示“更多”选项来展开显示。它的创建也很简单,在Activity中覆盖onCreateOptionsMenu(Menu menu)方法。

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "添加");

    menu.add(0, 2, 2, "删除");

    return super.onCreateOptionsMenu(menu);

}

 

在Menu的add方法中有四个参数:

第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。

第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。

 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。

 第四个String类型的title参数,表示选项中显示的文字。

按下Menu键后效果如图2-24所示:

技术分享

图2-24 普通Menu的使用

 

当然,我们也可以给每一个菜单项设置单独的图标:

menu.add(0, 1, 1, "添加").setIcon(R.drawable.add_no);

menu.add(0, 2, 2, "删除").setIcon(R.drawable.reduce_no);

 

效果如图2-25所示:

技术分享

图2-25 Menu添加图标

 

这样就有了“添加”和“删除”两个菜单选项。如果要添加点击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。

@Override

public boolean onOptionsItemSelected(MenuItem item) {

if(item.getItemId() == 1){

        Toast t = Toast.makeText(this, "你选的是添加菜单", Toast.LENGTH_SHORT);

        t.show();

} else if(item.getItemId() == 2){

        Toast t = Toast.makeText(this, "你选的是删除菜单", Toast.LENGTH_SHORT);

        t.show();

    }

    return true;

}

 

2)SubMenu(子菜单)

    如果刚才介绍的Menu为第一级按钮的话,SubMenu就是第二级按钮,它是将相同功能的分组进行多级显示的菜单。

  SubMenu的使用也同样简单,在第一段代码onCreateOptionsMenu(Menu menu)方法中加入几句,成下面这样:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "添加");

    menu.add(0, 2, 2, "删除");

    SubMenu subMenu = menu.addSubMenu(0, 3, 3, "修改");

    subMenu.add(1, 4, 1, "用户名修改");

subMenu.add(1, 5, 2, "密码修改");  

return true;

}

 

点击“修改”后就会出现子菜单,有两个子选项,分别是“用户名修改”和“密码修改”,效果如图2-26所示:

技术分享

图2-26 子菜单的使用

 

3)Context Menu(上下文菜单)

Context Menu类似于电脑上的右键,长按某个View之后弹出来的菜单。我们也来举个简单的例子加以说明。

首先在布局文件中定义一个按钮:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <Button

        android:id="@+id/test"

        android:layout_centerInParent="true"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="我的按钮"/>

</RelativeLayout>

 

然后我们在该Activity的onCreate方法里对这两个按钮进行注册,代码如下:

private Button myButton;

 

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    myButton = (Button) findViewById(R.id. my_button1);

    registerForContextMenu(myButton);   

}

 

注册好了之后,我们就可以覆盖onCreateContextMenu方法,在这方法中实现b1和b2两个按钮的长按事件,代码如下:

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

            ContextMenuInfo menuInfo) {

if(v== myButton){

            Toast.makeText(DialogActivity.this, "长按事件", Toast.LENGTH_SHORT).show();

    }

    super.onCreateContextMenu(menu, v, menuInfo); }

 

我们长按按钮来看看效果,如图2-27所示:

技术分享

图2-27 上下文菜单的使用

 

我们使用的主要就是以上三种菜单,它们各有各的特点,应用在不同的场合。

其实很多时候,我们比不是通过“硬编码”来创建菜单的,而是采用xml文件的方式。这种方式可以使代码和文件分离开来,使代码整个看上去更加的清晰。创建起来也相当的方便、快捷。下面我们也举一个简单的例子加以说明。

首先要在res/目录下建一个文件夹,名为menu,接着在该文件夹下建一个名为menu_xml_file.xml的xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:id="@+id/grout_main">

        <item android:id="@+id/menu_1"

                android:title="Menu1"/>

        <item android:id="@+id/menu_2"

            android:title=" Menu2" />

</group>

</menu>

 

在Activity中覆盖onCreateOptionsMenu(Menu menu)方法,代码如下:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.menu_xml_file, menu);

    return true;

}

 

这样Menu菜单就创建好了,效果如图2-28所示:

技术分享

图2-28 xml文件创建菜单

 

和之前一样,我们也可以通过ID监听它们的点击事件。

第二章 吸引你的眼球—UI编程(8)