一般的Android手机上都会有Menu键,那么我们怎么来处理Menu的菜单项和它的点击事件呢?下面这个例子就示范了“关于”对话框和“离开”等功能。
要为菜单添加菜单项,就要重写Activity中的OnCreateOptionsMenu方法,而要响应菜单的点击事件,就要重写OnOptionsItemsSelected方法:
- public override bool OnCreateOptionsMenu(IMenu menu)
- {
- menu.Add(0, 0, 0, new Java.Lang.String("关于"));
- menu.Add(0, 1, 1, new Java.Lang.String("退出"));
- return base.OnCreateOptionsMenu(menu);
- }
- public override bool OnOptionsItemSelected(IMenuItem item)
- {
- bool b = base.OnOptionsItemSelected(item);
- switch (item.ItemId)
- {
- case 0:
- MessageBox.Show(this, "信息", "欢迎访问区健的博客:http://blog.csdn.net/ojlovecd");
- break;
- case 1:
- MessageBox.Confirm(this, "提示", "确定离开吗?", delegate { this.Finish(); }, delegate { });
- break;
- }
- return b;
- }
其中的MessageBox.Confirm是我新增的MessageBox类的静态方法,用以提示用户是否要执行操作:
- public class MessageBox
- {
- private static AlertDialog.Builder CreateDialog(Context ctx, string title, string message)
- {
- AlertDialog.Builder dlg = new AlertDialog.Builder(ctx);
- return dlg.SetTitle(title).SetMessage(message);
- }
- public static void Show(Context ctx, string title, string message)
- {
- CreateDialog(ctx, title, message).SetPositiveButton("确定", delegate { }).Show();
- }
- public static void Confirm(Context ctx, string title, string message, EventHandler<DialogClickEventArgs> okHandler, EventHandler<DialogClickEventArgs> cancelHandler)
- {
- CreateDialog(ctx, title, message).SetPositiveButton("确定", okHandler).SetNegativeButton("取消", cancelHandler).Show();
- }
- public static void ShowErrorMessage(Context ctx, Exception ex)
- {
- Show(ctx, "错误", ex.Message);
- }
- }
常看见很多程序或网站里都有“加载中”的对话框,在Android里,要实现这个效果,实在是太easy了,通过ProgressDialog即可轻松完成。需要留意的是,ProgressDialog必须在后台程序运行完毕之前以Dismiss()方法来关闭并取得焦点的对话框,否则程序就会陷入无法终止的无穷循环中。所以,在下面的例子中,我们以线程Thread来模拟后台程序的运行,再通过线程运行完毕时,关闭这个加载中的动画对话框。
- ProgressDialog pd = ProgressDialog.Show(v.Context, new Java.Lang.String("提示"), new Java.Lang.String("正在获取数据,请稍后……"), true);
- Java.Lang.Thread th = new Java.Lang.Thread(() =>
- {
- try
- {
- Java.Lang.Thread.Sleep(3000);
- }
- finally
- {
- pd.Dismiss();
- }
- });
- th.Start();
怎么样是不是超级简单呢?最后,我们为AlerDialog增添选择功能来结束这一次的学习。
- AlertDialog.Builder dlg = new AlertDialog.Builder(v.Context);
- string[] items = {
- "猪肉干",
- "牛肉干",
- "猪肉松",
- "牛肉松",
- "猪肉柳",
- "牛肉柳",
- "猪肉粒",
- "牛肉粒"
- };
- dlg.SetTitle("请选择你最喜欢的黄胜记").SetItems(items,
- (sender, e) =>
- {
- MessageBox.Show(v.Context, "", string.Format("你最喜欢的是:{0}", items[(int)e.Which]));
- });
- dlg.Show();