系出名门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 Notification通知栏的必备姿势
  2. Android 通知(Notification)高级用法和注意事项
  3. wifi 通知栏上 选择程序时出现你的应用
  4. Android——NDK下载提示缺少toolchains问题解决
  5. android之【本地通知Notification】
  6. Android 通知栏Notification 悬浮通知栏
  7. android 通知 手机 媒体 数据库 更新
  8. Android 打包失败,提示 Android resource linking failed
  9. Android UI控件详解-AutoComplete-TextView(自动提示)

随机推荐

  1. 解决:The Genymotion virtual device cou
  2. Android(安卓)stuido程序真机运行时闪退
  3. 报错:ERROR: Your project path contains
  4. android 监听系统键盘显隐
  5. Android实例三:学习Service
  6. weblogic 停在starting状态的解决办法
  7. android_busybox
  8. android7.0适配权限问题
  9. Android(安卓)可靠判断是不是Debug版本
  10. Android数据库升级、降级、创建(onCreate