第二章 吸引你的眼球—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监听它们的点击事件。

时间: 2024-12-25 13:12:56

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

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

第二章 吸引你的眼球-UI编程 学习Android应用程序的开发技术,除了先要熟悉相关工具以外,最直接的,就是学习如何使用各种UI组件.我们开发的应用程序,一般都会包含一组用户可见的界面,而这些界面就是由一个个的AndroidUI组件组成的.我们在学习界面开发技术的过程中,首先就要熟悉这些组件,然后才能将它们有效的组织起来,构成一个美观.合理的界面. 本章会先详细讲解一些常用的UI组件,及如何自定义组件,然后会说明一些其它常用的UI编程技术. 2.1 UI基础-常用UI组件 Android的组件

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

2.2彰显你的个性-自定义UI组件 很多时候,Android的常用控件并不能满足我们的需求.为了吸引更多的眼球,达到标新立异的效果,我们可以自己来定义各种控件.我们可以通过继承基础控件来重写某些环节,当然我们也可以将多个控件组合成一个新控件来使用. 我们先来看看下面一个例子,在这个例子当中,我们实现了一个带有图片和文字的按钮. 首先,定义一个layout,实现按钮内部的布局.代码如下: <?xml version="1.0" encoding="utf-8"?

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

2.1.6图片拖动-拖动效果(Gallery) 一个应用如果有非常炫的效果相信也可以吸引不少人的眼球.Gallery就是一个非常炫的效果,你可以用手指直接拖动图片进行移动,iPhone刚出现的时候,这个效果就吸引了无数的苹果粉丝为之疯狂,在Android平台上也可以实现这一效果.下面,我们以一个简单的像册例子来加以说明. 1)在布局文件中定义一个Gallery(用来展示图片)和一个TextView(用来监听Gallery点击事件). <Gallery android:id="@+id/my

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

2.1.4图片显示-图片视图(ImageView) 如果一个界面全是由文字组成的,那这个界面一定是枯燥而乏味的.因此,在合适的位置,放上一些合适的图片,不仅能大大增加界面的美观,还能使你的应用更加吸引人.在Android中,要实现在界面上显示图片有很多种方法,在这里,我们介绍一下最常用的图片视图组件(ImageView).ImageView用来显示任意图像图片,我们可以自己来定义显示的尺寸和颜色等.我们还是举个例子来看看ImageView是怎么使用的. 首先,在布局文件中定义ImageView组

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

2.3简单明了的消息提示框(Toast)和对话框(Dialog) 2.3.1Toast提示 很多时候,我们需要对用户提供一些提示信息.比如,当用户登入应用程序时,提示用户"应用程序需要更新":当用户在输入框输入文本时,提示用户"最多能输入30个字符".这些需求,Toast轻松就能搞定! Toast是Android提供的"快显讯息"类.Toast使用起来非常简单,只需要简单的代码就能实现. Toast.makeText(Context contex

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

2.1.3文本编辑-编辑框(EditText) EditText在我们开发中也是经常要用到的组件.比如,要实现一个登录界面,需要用户输入帐号.密码.邮件等信息,这里就需要使用EditText组件来获得用户输入的内容,下面,我们就以一个登录界面为例,来看看EditText是怎么使用的. 1)在布局文件中定义一个TextView(用来响应按钮事件),两个EditText组件(一个用来记录用户名,一个用来记录密码)一个登录按钮和一个取消按钮,代码如下: <?xml version="1.0&qu

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

2.1.7列表组件(ListView) ListView在Android中也是一个使用比较频繁的组件.它相对于其他的基本组件来说,使用起来稍微复杂一些,需要注意的也比较多,尤其是和其他一些组件组合起来使用的情况. 在Android中,ListView用来显示一个列表的组件,它以列表的形式展示具体的内容,并且能够根据数据的长度自适应显示.用户可以选择并操作这个列表,同时会触发相应的事件:当鼠标滚动时会触发setOnItemSelectedListener事件:当点击列表时会触发setOnItemC

第二章:线程安全性——java并发编程实战

一个对象是否需要是线程安全的取决于它是否被多个线程访问. 当多个线程访问同一个可变状态量时如果没有使用正确的同步规则,就有可能出错.解决办法: 不在线程之间共享该变量 将状态变量修改为不可变的 在访问状态变量时使用同步机制 完全由线程安全类构造的程序也不一定是线程安全的,线程安全类中也可以包含非线程安全的类 一.什么是线程安全性 线程安全是指多个线程在访问一个类时,如果不需要额外的同步,这个类的行为仍然是正确的.(因为线程安全类中封装了必要的同步代码) 一个无状态的类是线程安全的.无状态类是指不

大道至简(第二章)读后感

在读过<大道至简>第一章后给了我学好编程的信心,明白了编程并不是学不会只是自己的态度不对.之后我又开始阅读第二章,第二章的题目一下子吸引了我,因为我正是懒人一枚,看到题目后感觉好亲切(窃喜,懒人还是蛮有价值的嘛). 如同第一章一样,作者还是以典故开篇,引人入胜,开篇为<华阳志>里面的一段话,“樊道有蜀王兵阑,亦有神作大江滩中.其崖斩竣不可破,(冰)乃积薪烧之.”作者通过典故说服了我,原来真的是懒人创造了方法,如果李冰如同愚公一般勤劳,他肯定是不会想到积薪烧之的.我也通过这个故事看到