[索引页]
[源码下载]


系出名门Android(3) - 对话框(Dialog)和通知(Notification)

作者:webabcd


介绍
在 Android 中种对话框及各种通知效果的应用
  • 常用对话框的使用,弹出式对话框、日期选择对话框、时间选择对话框、进度条对话框
  • 通知(出现在通知列表)和提示性通知(Toast)的演示


1、常用对话框的演示
res/layout/main.xml <? xml version ="1.0" encoding ="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical" android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >

< TextView android:id ="@+id/txtMsg" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ TextView >

< Button android:id ="@+id/btn1" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn2" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn3" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn4" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn5" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn6" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >

</ LinearLayout > res/layout/view.xml <? xml version ="1.0" encoding ="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical" android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >

< TextView android:text ="我是一个 View"
android:layout_width ="wrap_content" android:layout_height ="wrap_content" >
</ TextView >

</ LinearLayout > res/values/array.xml <? xml version ="1.0" encoding ="utf-8" ?>
< resources >
<!--
定义一个名为 ary 的 string 类型的数组
-->
< string-array name ="ary" >
< item >项目 1 </ item >
< item >项目 2 </ item >
</ string-array >
</ resources > Main.java package com.webabcd.dialog;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Button;

public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 弹出式对话框的 Demo。先调用 Builder(),在 Create(), 需要显示对话框的是后再调用 show()
AlertDialog dialog = new AlertDialog.Builder( this).setTitle( "弹出对话框").create();
dialog.show();

// 以下是各种对话框的 Demo
MyButtonClickListener listener = new MyButtonClickListener();
Button btn1 = (Button) this.findViewById(R.id.btn1);
btn1.setText( "简单的对话框的 Demo");
btn1.setOnClickListener(listener);

Button btn2 = (Button) this.findViewById(R.id.btn2);
btn2.setText( "包括常用设置的对话框(数据来自 xml)");
btn2.setOnClickListener(listener);

Button btn3 = (Button) this.findViewById(R.id.btn3);
btn3.setText( "弹出的对话框的内容是一个 View");
btn3.setOnClickListener(listener);

Button btn4 = (Button) this.findViewById(R.id.btn4);
btn4.setText( "日期选择对话框");
btn4.setOnClickListener(listener);

Button btn5 = (Button) this.findViewById(R.id.btn5);
btn5.setText( "时间选择对话框");
btn5.setOnClickListener(listener);

Button btn6 = (Button) this.findViewById(R.id.btn6);
btn6.setText( "进度条对话框");
btn6.setOnClickListener(listener);
}

class MyButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {

// 具体的对话框的实现可以通过重写 onCreateDialog 完成

switch (v.getId()) {
case R.id.btn1:
Main. this.showDialog(0);
break;
case R.id.btn2:
Main. this.showDialog(1);
break;
case R.id.btn3:
Main. this.showDialog(2);
break;
case R.id.btn4:
Main. this.showDialog(3);
break;
case R.id.btn5:
Main. this.showDialog(4);
break;
case R.id.btn6:
Main. this.showDialog(5);
break;
}
}
}

@Override
public Dialog onCreateDialog( int id) {
switch (id) {

case 0:
// 一个简单的弹出对话框
return new AlertDialog.Builder( this).setTitle( "这是一个简单的弹出对话框的 Demo")
.create();

case 1:
// 一个相对复杂的弹出对话框
return new AlertDialog.Builder( this)
.setTitle( "标题") // 设置标题
// .setCustomTitle(View) // 以一个 View 作为标题
.setIcon(R.drawable.icon01) // 设置标题图片
// .setMessage("信息") // 需要显示的弹出内容
.setPositiveButton( "确定", new OnClickListener() { // 设置弹框的确认按钮所显示的文本,以及单击按钮后的响应行为
@Override
public void onClick(DialogInterface a0, int a1) {
TextView txtMsg = (TextView) Main. this.findViewById(R.id.txtMsg);
txtMsg.append( "单击了对话框上的“确认”按钮\n");
}
})
.setItems(R.array.ary, new DialogInterface.OnClickListener() { // 弹框所显示的内容来自一个数组。数组中的数据会一行一行地依次排列
public void onClick(DialogInterface dialog, int which) {
}
})
// 其他常用方法如下
// .setMultiChoiceItems(arg0, arg1, arg2)
// .setSingleChoiceItems(arg0, arg1, arg2)
// .setNeutralButton(arg0, arg1)
// .setNegativeButton(arg0, arg1)
.create();

case 2:
// 弹出对话框为指定的 View 的 Demo
return new AlertDialog.Builder( this).setTitle( "此对话框的内容是一个 View")
.setView( this.findViewById(R.layout.view)).create();

case 3:
// 弹出日期选择对话框
Calendar c = Calendar.getInstance();
return new DatePickerDialog( this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
TextView txtMsg = (TextView) Main. this.findViewById(R.id.txtMsg);
txtMsg.append( "新设置的日期为:" + String.valueOf(year) + "-"
+ String.valueOf(monthOfYear) + "-"
+ String.valueOf(dayOfMonth) + "\n");
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));

case 4:
// 弹出时间选择对话框
Calendar c2 = Calendar.getInstance();
return new TimePickerDialog( this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
TextView txtMsg = (TextView) Main. this.findViewById(R.id.txtMsg);
txtMsg.append( "新设置的时间为:"
+ String.valueOf(hourOfDay) + ":"
+ String.valueOf(minute) + "\n");
}

}, c2.get(Calendar.HOUR), c2.get(Calendar.MINUTE), true);

case 5:
// 弹出进度条对话框
ProgressDialog progress = new ProgressDialog( this);
progress.setMessage( "loading...");
return progress;

default:
return null;
}
}
} 2、各种提示效果的演示
res/layout/main.xml
<? xml version ="1.0" encoding ="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical" android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >

< Button android:id ="@+id/btn1" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn2" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn3" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >
< Button android:id ="@+id/btn4" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" > </ Button >

</ LinearLayout > res/layout/view.xml <? xml version ="1.0" encoding ="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical" android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >

< TextView android:id ="@+id/txtMsg" android:layout_width ="wrap_content"
android:layout_height ="wrap_content" >
</ TextView >

</ LinearLayout > Main.java package com.webabcd.notification;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 通过 Tost.makeText().show() 来实现提示性的通知效果
// 短时间的提示性通知的 Demo
Button btn1 = (Button) this.findViewById(R.id.btn1);
btn1.setText( "短时间提示");
btn1.setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
Toast.makeText(Main. this, "我是短时间提示", Toast.LENGTH_SHORT).show();
}
});

// 长时间的提示性通知的 Demo
Button btn2 = (Button) this.findViewById(R.id.btn2);
btn2.setText( "长时间提示");
btn2.setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
Toast.makeText(Main. this, "我是长时间提示", Toast.LENGTH_LONG).show();
}
});

// 以一个 View 作为提示性通知的 Demo
Button btn3 = (Button) this.findViewById(R.id.btn3);
btn3.setText( "以一个 View 做提示");
btn3.setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
View view = inflateView(R.layout.view);
TextView txtMsg = (TextView) view.findViewById(R.id.txtMsg);
txtMsg.setText( "提示内容");

Toast toast = new Toast(Main. this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
}
});


Button btn4 = (Button) this.findViewById(R.id.btn4);
btn4.setText( "发出一个通知(Notification)");
btn4.setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
// 实例化通知管理器
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

// 指定单击通知后所打开的详细的通知页面(单击通知后打开 NotificationView)
PendingIntent contentIntent = PendingIntent.getActivity(
Main. this, 0, new Intent(Main. this,NotificationView. class), 0);

// 实例化一个通知,并指定其图标和标题(在提示栏上显示)
Notification n = new Notification(R.drawable.icon01, "我是滚动的通知信息我是滚动的通知信息我是滚动的通知信息", System.currentTimeMillis());

// 设置通知的发送人和通知的详细内容(打开提示栏后在通知列表中显示)
n.setLatestEventInfo(Main. this, "通知发送人", "我是详细的通知信息我是详细的通知信息我是详细的通知信息", contentIntent);

// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
n.vibrate = new long[] { 100, 250, 100, 500 };

// 发出通知(其中第一个参数为通知标识符)
nm.notify(0, n);
}
});
}

// 将指定的 xml 资源转换为一个 View
private View inflateView( int resource) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return vi.inflate(resource, null);
}

// 打开详细通知页后此 Activity 会被 Pause,从详细通知页返回后此 Activity 会被 Resume
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();

Log.d( "MyDebug", "onPause");
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();

Log.d( "MyDebug", "onResume");
}
} NotificationView.java package com.webabcd.notification;

import android.app.Activity;
import android.app.NotificationManager;
import android.os.Bundle;
import android.widget.TextView;

// 单击通知列表的某个通知后,所打开的详细的通知页
public class NotificationView extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);

TextView txtMsg = (TextView) this.findViewById(R.id.txtMsg);
txtMsg.setText( "点通知之后所链接到的 Activity");

NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 取消显示在通知列表中的指定通知(参数为通知标识符)
nm.cancel(0);

// 需要关闭此 Activity 的话就 finish 它既可
// this.finish();
}
}
OK
[源码下载]

更多相关文章

  1. Android(安卓)关机流程分析-----(1)Framework层
  2. [置顶] Android(安卓)实现对话框圆角功能
  3. Android(安卓)通知总结
  4. Android中使用输入提示
  5. Android—3分钟你也能学会AlertDialog对话框(2020-6-25)
  6. geekband android #5 第九周分享
  7. 系出名门Android(3) - 对话框(Dialog)和通知(Notification)
  8. android中创建具有自动提示功能的菜单
  9. Android(安卓)多点触控技术

随机推荐

  1. android GPS定位,基站定位,WIFI定位开关的
  2. Android(安卓)动态修改SeekBar滑块和进度
  3. android 自定义view 之 动态音频图 (二)
  4. Kotlin中的Android项目编译出现 Unresolv
  5. Read-only file system:android
  6. android 系统配置 常用命令 - linux
  7. android 查看电量情况,手机信息,电池历史记
  8. Android(安卓)PullToRefresh 详解
  9. [Android]读写fb0测试
  10. Android(安卓)中文 API (25) —— ZoomCont