搜索
您的当前位置:首页正文

Android-10 Android对话框

来源:欧得旅游网
第10讲 Android对话框

一、菜单(续上节)

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(见教材)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top