一、菜单(续上节)
2、上下文菜单Context Menu:长安某组件弹出的菜单 教材3.5.2 (代码见教材P67)
例子:为本例的背景色添加上下文菜单
二、对话框
四种对话框
1、提示对话框AlertDialog,2、进度对话框(以后讲) 3、日期选择对话框 4、时间选择对话框(教材P242)
提示对话框有几种
(1)带消息,带N个按钮的提示对话框 例:按下返回键,弹出确定退出的对话框
方法一、按教材上P69的例子,编写positivebutton匿名内部类
方法二、改进事件监听的部分 package com.example.testdialog;
import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog;
import android.app.AlertDialog.Builder; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener; import android.view.KeyEvent; import android.view.Menu;
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ //判断是否按下了返回键 //创建一个提示是否退出的对话框 Builder builder = new Builder(this); builder.setMessage(\"真的要退出吗?\"); builder.setIcon(R.drawable.ic_launcher); builder.setTitle(\"系统提示\"); builder.setPositiveButton(\"确定\ builder.setNegativeButton(\"取消\ builder.setNeutralButton(\"取消2\ builder.create().show(); } return super.onKeyDown(keyCode, event); } OnClickListener listener = new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { switch(which){ case AlertDialog.BUTTON_POSITIVE: //which代表按下的哪个按钮的常量 MainActivity.this.finish(); break; case AlertDialog.BUTTON_NEGATIVE: break; } }}; }
(2)带列表,带N个按钮的列表对话框 -----采用Builder的setItems方法来创建列表
例:按下按钮,显示列表对话框,设置字体的颜色
button1.setOnClickListener(new View.OnClickListener() {
//因为此程序中出现了两个OnClickListener,但是它们是不同两个类,在这里,将父类也写出来,以示区别
@Override
public void onClick(View v) { // 弹出一个列表的对话框
builder.setTitle(\"一个列表对话框\");
builder.setItems(new String[]{\"绿色\",\"红色\"}, new OnClickListener(){ //字符串数组的元素就是选项上的内容 @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub switch(which){
case 0: //0表示字符串数组的第0个元素 tv.setBackgroundColor(Color.GREEN); break;
case 1: //1表示字符串数组的第1个元素 tv.setBackgroundColor(Color.RED); break; } }});
builder.create().show(); } });
(3)带多个单选列表项,带N个按钮的对话框
单选列表对话框将上面的setItems方法换成setSingleChoiceItem方法,并且需要加上一个确定按钮和取消按钮。
(4)带多个多选列表,带N个按钮的对话框 (5)创建界面自定义的对话框
例子1、创建一个自定义的列表对话框:
先创建一个Map,再为Map中的数据设置内容。再为Builder去setAdapter。在setAdapter的同时需要添加事件监听器。(需要为Builder设置一个适配器SimpleAdapter,类似创建ListView,略讲,请自学)
例子2、创建一个自定义的复杂对话框,如登录对话框
比如,按下按钮,或者其他条件去触发,弹出一个登录的对话框。这就需要一个自定义的对话框。
LayoutInflater
getLayoutInflater()方法,作用类似于findViewById(),区别是,getLayoutInflater()用来找res/layout/下面的布局文件,而
findViewById是找xml布局文件下面具体的组件,如Button等。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) this.findViewById(R.id.button1); tv = (TextView) this.findViewById(R.id.tv); final Builder builder = new Builder(this);
button1.setOnClickListener(new View.OnClickListener() { //因为此程序中出现了两个OnClickListener,但是它们是不同两个类,在这里,将父类也写出来,以示区别 @Override
public void onClick(View v) { // 弹出一个列表的对话框
builder.setTitle(\"一个自定义的登录对话框\");
RelativeLayout layout = (RelativeLayout) getLayoutInflater().inflate(R.layout.logindialog, null); builder.setView(layout);
builder.setPositiveButton(\"确定\", null); builder.setNegativeButton(\"取消\", null); builder.create().show(); } }); }
创建对话框的步骤总结如下:
(1) 创建AlertDialog.Builder对象,该对象是AlertDialog的创建器 (2) 调用Builder的方法为对话框设置图标、标题、内容等 (3) 调用Builder的create方法来创建AlertDialog对话框 (4) 调用AlertDialog的show方法来显示对话框
日期选择对话框 DatePickerDialog
button1.setOnClickListener(new View.OnClickListener() {
//因为此程序中出现了两个OnClickListener,但是它们是不同两个类,在这里,将父类也写出来,以示区别 @Override
public void onClick(View v) {
// 弹出一个列表的对话框
Calendar c = Calendar.getInstance(); DatePickerDialog d = new DatePickerDialog(MainActivity.this,
new OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) { tv.setText(\"当前日期是\"+year+\"年\"+(monthOfYear+1)+\"月\"+dayOfMonth+\"日\"); }} ,
c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DATE));
d.show(); } }); }
时间选择对话框TimePickerDialog
public void onClick(View v) { // 弹出一个列表的对话框
Calendar c = Calendar.getInstance();
TimePickerDialog d = new TimePickerDialog(MainActivity.this,
new OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
tv.setText(\"当前时间是\"+hourOfDay+\"点\"+minute);
}} ,
c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),true);
d.show(); }
三、Toast(见教材)
因篇幅问题不能全部显示,请点此查看更多更全内容