Android开发06—菜单与对话框(上)
Android开发06—菜单与对话框(上)
1.菜单
1)选项菜单和子菜单
当Activity在前台工作的时候,按下menu将会弹出相应的选项菜单。这个功能是需要开发人员编成实现的,如果在程序中没有此功能,那么程序运行时按下手机的menu键将不会有反映。
对于有图标的选项菜单,每次最多能显示6个,当多于6个时,将只显示前5个和一个拓展菜单选项。
在Android中通过回调方法来创建菜单并处理菜单按下的事件。
开发选项菜单主要用到Menu,MenuItem及SubMenu
实例:接受用户在菜单中的选项并输出到文本框控件中
main.xml:
Activity:
Acticity:3.对话框
对话框是Activity运行时显示的小窗口,当显示对话框时,当前Activity失去焦点而由对话框负责所有的人机交互。一般来说,对话框用于提示消息或弹出一个与程序主进程直接相关的小程序。
Android平台下主要有以下几种对话框:
1)提示对话框 AlertDialog
AlertDialog对话框可以包含若干按钮和一些可选的单选按钮或复选框。
2)进度对话框
ProgressDialog可以显示进度轮或进度条,由于ProgressDialog继承自AlertDialog,所以其也可以添加按钮。
3)日期选择对话框DatePickerDialog
4)时间选择对话框TimePickerDialog
对话框是作为Activity的一部分被创建和显示的,在程序中通过开发回调方法onCreateDialog来完成对话框的创建,该方法需要传入代表对话框id参数。如果需要显示对话框,则调用showDialog方法传入对话框id来显示指定的对话框。
当对话框第一次被显示时,Android会调用onCreateDialog方法来创建对话框实例,之后将不再重复创建该实例。同时,每次对话框再被显示之前都会调用onPrepareDialog方法,如果补充些该方法,那么每次显示的对话框将是最初创建的那个。
关闭对话框可以调用Dialog类的dismiss方法来实现,但是要注意这种方法不会让对话框彻底消失,如果要对话框被关闭后彻底消失,要调用removeDialog方法并传入Dialog的id。
下面通过普通对话框的例子来说明如何使用:
main.xml:
Activity:package qijia.si;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.app.Dialog;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.ContextMenu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;public class ContextMenuDemo extends Activity {//普通对话框idfinal int COMMON_DIALOG = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取Button对象 Button btn = (Button)findViewById(R.id.button1); //为Button设置监听器 btn.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubshowDialog(COMMON_DIALOG);}}); } //重写onCreateDialog方法 public Dialog onCreateDialog(int id){ //声明一个dialog对象用于返回 Dialog dialog = null; switch(id){ case COMMON_DIALOG: Builder b = new AlertDialog.Builder(this); //设置对话框图标 b.setIcon(R.drawable.header); b.setTitle(R.string.btn); b.setMessage(R.string.dialog_msg); //添加按钮 b.setPositiveButton(R.string.ok, new OnClickListener(){public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubEditText et = (EditText)findViewById(R.id.editText1);et.setText(R.string.dialog_msg);} }); dialog = b.create(); break; default: break; } return dialog; } }