AndroidUI之菜单对话框

AndroidUI之菜单对话框


2024年6月19日发(作者:)

《Android基础应用》

AndroidUI之菜单对话框

 本章任务

 使用Android开发菜单应用

 使用Android开发XML菜单

 使用Android开发对话框应用

 本章目标

 掌握Android中的菜单

 掌握Android中的对话框

1. Android基本控件菜单

菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供

了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口

Android系统支持三种菜单

 选项菜单(Option Menu)

 子菜单(Submenu)

 快捷菜单(Context Menu)

1.1 选项菜单

选项菜单是一种经常被使用的Android系统菜单

打开方式:通过“菜单键”(MENU key)打开

AndroidUI之菜单对话框

 选项菜单分类

 图标菜单(Icon Menu)

图标菜单能够同时显示文字和图标的菜单,最多支持6个子项

图标菜单不支持单选框和复选框

 扩展菜单(Expanded Menu)

扩展菜单是在图标菜单子项多余6个时才出现,通过点击图标菜单最后的子项“More”才能

打开,扩展菜单是垂直的列表型菜单

 不能够显示图标

 支持单选框和复选框

创建一个选项菜单的步骤

 覆盖Activity的onCreateOptionsMenu(Menu menu)函数

 调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为

菜单设置图标

 当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应

事件

示例一

- 2 -

AndroidUI之菜单对话框

public boolean onCreateOptionsMenu(Menu menu) {

}

( "关于");

( "退出");

return teOptionsMenu(menu);

public boolean onOptionsItemSelected(MenuItem item) {

}

switch (mId()) {

case 1:

}

return onsItemSelected(item);

setTitle("关于");

break;

setTitle("退出!");

break;

case 2:

示例的实现结果

- 3 -

AndroidUI之菜单对话框

onCreateOptionsMenu()函数

 函数返回值:布尔值,表示是否显示该函数中设置的菜单

 参数:Menu对象

onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次

Menu对象的add()方法添加菜单子项,这个函数有四个重载函数

public MenuItem add(CharSequence title)

 参数:指定菜单上的显示文字

public MenuItem add(int titleRes)

 参数:菜单标题的引用通过中添加

public MenuItem add(int groupId, int itemId, int order, CharSequence title);

public MenuItem add(int groupId, int itemId, int order, int titleRes);

 groudId:是指组ID,用以批量地对菜单子项进行处理和排序

 itemId:是子项ID,是每一个菜单子项的唯一标识

 order:指定菜单子项在选项菜单中的排列顺序

示例二

- 4 -

AndroidUI之菜单对话框

private static final int ITEM_COLOR = ;

private static final int ITEM_MUSIC = + 1;

public boolean onCreateOptionsMenu(Menu menu) {

}

(0, ITEM_COLOR, 0, "颜色");

(0, ITEM_MUSIC, 0, );

("关于");

();

return teOptionsMenu(menu);

设置菜单的图标

public MenuItem setIcon(int iconRes)

private static final int ITEM_COLOR = ;

private static final int ITEM_MUSIC = + 1;

public boolean onCreateOptionsMenu(Menu menu) {

}

(0, ITEM_COLOR, 0, "颜色").setIcon();

(0, ITEM_MUSIC, 0,

("关于").setIcon();

().setIcon();

return teOptionsMenu(menu);

).setIcon();

示例的实现结果

- 5 -

AndroidUI之菜单对话框

菜单多余六个菜单时显示扩展菜单

 不能够显示图标

 支持单选框和复选框

(0, 5, 0, "关于1").setIcon();

(1, 6, 0, "关于2").setIcon();

// (1,7,0,"关于3").setCheckable(true);

// (1,8,0,"关于4").setCheckable(true);

(1, 7, 0, "关于3").setIcon();

(1, 8, 0, "关于4").setIcon();

upCheckable(1, true, true);

public void setGroupCheckable(int group, boolean checkable, boolean exclusive);

在setGroupCheckable()方法中,第一个参数为要设置的groupId,第二个为菜单项是否可选,

最后一个参数是是否为单选

切换单复选的选择效果需要在onOptionsItemSelected中设置

- 6 -

AndroidUI之菜单对话框

public boolean onOptionsItemSelected(MenuItem item) {

switch (mId()) {

case 6:

case 7:

case 8:

}

if (ked())

cked(false);

cked(true);

else

break;

onPrepareOptionsMenu()函数,能够动态的添加、删除菜单子项,或修改菜单的标题、图标和

可见性等内容 ,函数的返回值的含义与onCreateOptionsMenu()函数相同

当用户第一次按Menu键时,先执行onCreateOptionsMenu( ),然后执行

onPrepareOptionsMenu();当用户第二次,第三次,第N次按Menu建时,执行

onPrepareOptionsMenu(),因此我们可以在onPrepareOptionsMenu()中处理每次的变化

public boolean onPrepareOptionsMenu(Menu menu) {

em(ITEM_COLOR).setVisible(false);

em(ITEM_MUSIC).setTitle("音乐1");

return areOptionsMenu(menu);

}

1.2 子菜单

子菜单就是将相同功能的分组进行多级显示的一种菜单

子菜单是能够显示更加详细信息的菜单子项

 菜单子项使用了浮动窗体的显示形式,能够更好适应小屏幕的显示方式

子菜单不支持嵌套

- 7 -

AndroidUI之菜单对话框

创建一个子菜单的步骤

 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法

来添加子菜单

 调用SubMenu的add()方法,添加子菜单

 覆盖onContextItemSelected()方法,响应子菜单的单击事件

示例

public boolean onCreateOptionsMenu(Menu menu) {

}

SubMenu file = Menu("文件");

SubMenu edit = Menu("编辑");

(0, ITEM_NEW, 0, "新建");

(0, ITEM_OPEN, 0, "打开");

return teOptionsMenu(menu);

SubMenu是Menu的子类

比较常用的方法有:

- 8 -

AndroidUI之菜单对话框

setHeaderIcon()、setHeaderTitle()

设置关联Intent打开另一个Activity

public MenuItem setIntent(Intent intent)

public boolean onCreateOptionsMenu(Menu menu) {

}

SubMenu file = Menu("文件");

SubMenu edit = Menu("编辑");

(0, ITEM_NEW, 0, "新建");

(0, ITEM_OPEN, 0, "打开");

derIcon();

derTitle("文件操作");

MenuItem item00 = ("菜单案例一");

// 为菜单项设置关联的Activity

ent(new Intent(this, ));

return teOptionsMenu(menu);

示例的实现结果如图

- 9 -

AndroidUI之菜单对话框

练习——菜单应用

需求说明:

按图创建菜单

每个菜单都有子菜单

性别子菜单使用单选

颜色子菜单使用复选

启动程序子菜单需要使用关联Intent

- 10 -

AndroidUI之菜单对话框

1.3 快捷菜单

快捷菜单也可称为上下文菜单,同样采用了动态窗体的显示方式,与子菜单的实现方式相

同,但两种菜单的启动方式却截然不同

快捷菜单类似于普通桌面程序中的“右键菜单”,当用户点击界面元素超过2秒后,将启

动注册到该界面元素的快捷菜单

创建一个快捷菜单的步骤

 覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜

单项

 覆盖onContexItemSelected()方法,响应菜单单击事件

 调用registerForContexMenu()方法为视力注册上下文菜单

示例

public void onCreateContextMenu(ContextMenu menu, View v,

}

ContextMenuInfo menuInfo) {

(0, MENU1, 0, "红色");

(0, MENU2, 0, "绿色");

(0, MENU3, 0, "蓝色");

// 将三个菜单项设为单选菜单项

upCheckable(0, true, true);

//设置上下文菜单的标题、图标

derIcon();

derTitle("选择背景色");

teContextMenu(menu, v, menuInfo);

- 11 -

AndroidUI之菜单对话框

public boolean onContextItemSelected(MenuItem item) {

}

switch (mId())

{

}

return extItemSelected(item);

case MENU1:

cked(true);

kgroundColor();

break;

cked(true);

kgroundColor();

break;

cked(true);

kgroundColor();

break;

case MENU2:

case MENU3:

public void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

setContentView(tmenudemo1);

// 为文本框注册上下文菜单

txt = (TextView) findViewById();

registerForContextMenu(txt);

}

示例的实现结果如图

- 12 -

AndroidUI之菜单对话框

onCreateContextMenu函数

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo)

 menu:需要显示的快捷菜单

 v:V是用户选择的界面元素

 menuInfo:menuInfo是所选择界面元素的额外信息

onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次

onCreateContextMenu函数在每次启动都将会被调用一次

XML菜单

Android不仅支持代码创建菜单,同时还支持xml配置菜单

创建一个XML菜单的步骤

 在/res/目录下新建menu文件夹,用于存储Menu XML资源文件

 在/res/menu/下新建菜单界面描述文件

 重写Activity中onCreateOptionsMenu(Menu menu)方法

- 13 -

1.4

AndroidUI之菜单对话框

示例

创建xml文件使用Android xml向导

创建选项菜单

xmlns:android="/apk/res/android">

关于

">

退出

">

}

return teOptionsMenu(menu);

MenuInflater inflater = uInflater();

e(ldemo, menu);

public boolean onCreateOptionsMenu(Menu menu) {

创建子菜单

 在标签内嵌套

- 14 -

AndroidUI之菜单对话框

菜单项

1">

子菜单项

1"

子菜单项

2"

/>

/>

多选菜单

">

子菜单

1"/>

子菜单

2"/>

子菜单

3"/>

单选菜单

">

子菜单

1"/>

子菜单

2"/>

子菜单

3"/>

创建单选子菜单、多选子菜单

 使用group标签,设置属性android:checkableBehavior

 single设置为单选,all为多选,none为普通选项

练习——菜单应用

需求说明:

- 15 -

AndroidUI之菜单对话框

按图创建xml菜单

每个菜单都有子菜单

性别子菜单使用单选

颜色子菜单使用复选

启动程序子菜单启动关联Intent

2. 对话框

一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点,

对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.

在Android中Dialog是创建对话框的基础,我们不能直接实例化一个Dialog而是使用它的子类

Android API 支持下列类型的对话框对象

 警告对话框 AlertDialog

 进度对话框 ProgressDialog

 日期选择对话框 DatePickerDialog

 时间选择对话框 TimePickerDialog

2.1 AlertDialog警告对话框

AlertDialog主要用来提示一些文本信息

 可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可

以是自定义的

使用AlertDialog来完成下面几种任务

 显示提示信息,让用户选择是或否

 从Dialog中提供的列表里选择一个Item项

 从Dialog中提供的列表里选择多个Item项

- 16 -

AndroidUI之菜单对话框

 …

创建AlertDialog的步骤

 创建一个r对象,该对象是AlertDialog的创建器

 调用r的方法,设置要创建的Dialog的参数,如图标,几个按钮,显示什

么内容等

 对按钮设置回调函数(因为android中的dialog都是异步的,所以要回调函数)

 调用r的create()方法,让Builder生成dialog对象

 使用show()方法将dialog显示出来

 弹出一个消息框

public void onClick(View v) {

}

// 创建一个r对象

r builder = new r(

);

//设置对话框图标

n(_default_icon);

// 设置对话框的标题

le("AlertDialog标题");

// 设置对话框显示的内容

sage("AlertDialog简单消息。。。");

// 为对话框设置一个”确定“按钮

itiveButton("确定", null);

// 创建对话框

AlertDialog ad = ();

// 显示对话框

();

如果不进行设置。。。。无文字,无图标,无按钮。。只能回退。。。

- 17 -

AndroidUI之菜单对话框

 链式方法调用

方法调用返回的是该方法的对象引用,因而这个引用可以产生下一个方法调用;如此而

已,生成一个调用链。

适当使用方法链式调用可以简化代码的编写,提高编程效率

public void onClick(View v) {

// 创建一个r对象

r builder = new r(

);

//设置对话框图标

n(_default_icon);

le("AlertDialog标题")

.setMessage("AlertDialog简单消息。。。")

.setPositiveButton("确定", new

EmptyListener()).create()

}

.show();

- 18 -

AndroidUI之菜单对话框

 带确认和取消按钮的对话框

对话框支持最多三个按钮

确定setPositiveButton

取消setNegativeButton

忽略setNeutralButton

public void onClick(View v) {

// 创建一个r对象

r builder = new r(

);

.setMessage("AlertDialog确认消息。。。")

.setPositiveButton("确定", new EmptyListener())

le("AlertDialog标题")

.setNegativeButton("取消", new

EmptyListener()).create()

}

.show();

- 19 -

AndroidUI之菜单对话框

 对话框按钮监听

{

}

@Override

public void onClick(DialogInterface dialog, int which) {

}

setTitle("被点击");

// 空的监听类

private class EmptyListener implements kListener

 列表类 对话框

分为列表对话框,单选列表对话框,多选列表对话框

列表对话框

public Builder setItems(int itemsId, final OnClickListener listener)

- 20 -

AndroidUI之菜单对话框

 itemsId为字符串数组资源

public Builder setItems(CharSequence[] items, final OnClickListener listener)

单选列表对话框

public Builder setSingleChoiceItems(

CharSequence[] items, int checkedItem, final OnClickListener listener)

多选列表对话框

public Builder setMultiChoiceItems(CharSequence[] items,

boolean[] checkedItems, , final OnClickListener listener)

设置单选只需要将setItems方法改为:setSingleChoiceItems,同时多一个参数checkItem表

示默认选中第几个选项即可。不过这边跟setItems不一样的是,setItems时当用户选中某个

Item时会触发回调函数同时关闭窗口,而setSingleChoiceItems当用户选中某个Item时会触

发回调函数,但是不会关闭窗口,用户需要通过设置3个按钮中任意一个来关闭窗口。

设置多选框跟单选框差不多,它调用方法:setMultiChoiceItems。但是参数有个地方不一样,

因为单选的情况下只有一个Item被选中所以可以用一个以0开始的数字来表示选中第几个,但

是多选有可能选中多个所以用一个boolean数组来存放各个Item的状态,选中为true,否则为

false。

}

@Override

public void onClick(DialogInterface dialog,

}

int which) {

String msg = "选择的id是:" + which + ",内容为:"

+ itemsDays[which];

xt(, msg,

_LONG).show();

public void onClick(View v) {

// 创建一个r对象

r builder = new r(

);

n(_default_icon);

le("列表对话框");

ms(itemsDays,

new kListener() {

});

().show();

- 21 -

AndroidUI之菜单对话框

@Override

public void onClick(DialogInterface dialog,

}

int which) {

String msg = "选择的id是:" + which + ",内容为:"

+ itemsDays[which];

xt(, msg,

_LONG).show();

public void onClick(View v) {

// 创建一个r对象

r builder = new r(

);

n(_default_icon);

le("单选列表对话框");

gleChoiceItems(itemsDays, 2,

new kListener() {

});

itiveButton("确定", new

EmptyListener()).create()

}

.show();

- 22 -

AndroidUI之菜单对话框

public void onClick(View v) {

// 创建一个r对象

r builder = new r(

);

n(_default_icon);

le("多选列表对话框");

tiChoiceItems(itemsDays, itemsSelectedDays,

new iChoiceClickListener() {

@Override

public void onClick(DialogInterface dialog,

}

int which, boolean isChecked) {

String msg = "";

for (int i = 0; i < ;

}

xt(, msg,

_SHORT).show();

if (itemsSelectedDays[i]) {

}

msg += itemsDays[i]+".";

i++) {

});

itiveButton("确定", new

EmptyListener()).create()

}

.show();

 自定义对话框

- 23 -

AndroidUI之菜单对话框

public void onClick(View source)

{

// 设置对话框的图标

n();

// 设置对话框的标题

le("自定义普通对话框");

//装载/res/layout/界面布局

TableLayout loginForm = (TableLayout)getLayoutInflater()

.inflate( , null);

// 设置对话框显示的View对象

w(loginForm);

// 为对话框设置一个“确定”按钮

itiveButton("登录"

// 为按钮设置监听器

, new OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which)

{

//此处可执行登录处理

}

});

// 为对话框设置一个“取消”按钮

ativeButton("取消"

, new OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which)

{

//取消登录,不做任何事情。

}

});

//创建、并显示对话框

- 24 -

AndroidUI之菜单对话框

练习——对话框应用

需求说明:

按图实现页面布局

第一个按钮使用 AlertDialog创建普通对话框,在第一个EditText中显示

用户选择

第二个按钮使用 AlertDialog创建列表对话框,根据用户选择设置第一个

TextView的背景颜色

- 25 -

AndroidUI之菜单对话框

总结

创建选项菜单的步骤?

创建XML菜单的步骤?

如何创建简单对话框 ?

如何创建列表对话框 ?

- 26 -


发布者:admin,转转请注明出处:http://www.yc00.com/web/1718738131a2752252.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信