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

Mango 2011-05-09

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

作者:webabcd

介绍

在Android中种对话框及各种通知效果的应用

常用对话框的使用,弹出式对话框、日期选择对话框、时间选择对话框、进度条对话框

通知(出现在通知列表)和提示性通知(Toast)的演示

1、常用对话框的演示

res/layout/main.xml

代码

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextViewandroid:id="@+id/txtMsg"android:layout_width="wrap_content"

android:layout_height="wrap_content"></TextView>

<Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn3"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn4"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn5"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn6"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

</LinearLayout>

res/layout/view.xml

代码

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextViewandroid:text="我是一个View"

android:layout_width="wrap_content"android:layout_height="wrap_content">

</TextView>

</LinearLayout>

res/values/array.xml

<?xmlversion="1.0"encoding="utf-8"?>

<resources>

<!--

定义一个名为ary的string类型的数组

-->

<string-arrayname="ary">

<item>项目1</item>

<item>项目2</item>

</string-array>

</resources>

Main.java

代码

packagecom.webabcd.dialog;

importjava.util.Calendar;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.app.DatePickerDialog;

importandroid.app.Dialog;

importandroid.app.ProgressDialog;

importandroid.app.TimePickerDialog;

importandroid.app.DatePickerDialog.OnDateSetListener;

importandroid.app.TimePickerDialog.OnTimeSetListener;

importandroid.content.DialogInterface;

importandroid.content.DialogInterface.OnClickListener;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.DatePicker;

importandroid.widget.TextView;

importandroid.widget.TimePicker;

importandroid.widget.Button;

publicclassMainextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//弹出式对话框的Demo。先调用Builder(),在Create(),需要显示对话框的是后再调用show()

AlertDialogdialog=newAlertDialog.Builder(this).setTitle("弹出对话框").create();

dialog.show();

//以下是各种对话框的Demo

MyButtonClickListenerlistener=newMyButtonClickListener();

Buttonbtn1=(Button)this.findViewById(R.id.btn1);

btn1.setText("简单的对话框的Demo");

btn1.setOnClickListener(listener);

Buttonbtn2=(Button)this.findViewById(R.id.btn2);

btn2.setText("包括常用设置的对话框(数据来自xml)");

btn2.setOnClickListener(listener);

Buttonbtn3=(Button)this.findViewById(R.id.btn3);

btn3.setText("弹出的对话框的内容是一个View");

btn3.setOnClickListener(listener);

Buttonbtn4=(Button)this.findViewById(R.id.btn4);

btn4.setText("日期选择对话框");

btn4.setOnClickListener(listener);

Buttonbtn5=(Button)this.findViewById(R.id.btn5);

btn5.setText("时间选择对话框");

btn5.setOnClickListener(listener);

Buttonbtn6=(Button)this.findViewById(R.id.btn6);

btn6.setText("进度条对话框");

btn6.setOnClickListener(listener);

}

classMyButtonClickListenerimplementsView.OnClickListener{

@Override

publicvoidonClick(Viewv){

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

switch(v.getId()){

caseR.id.btn1:

Main.this.showDialog(0);

break;

caseR.id.btn2:

Main.this.showDialog(1);

break;

caseR.id.btn3:

Main.this.showDialog(2);

break;

caseR.id.btn4:

Main.this.showDialog(3);

break;

caseR.id.btn5:

Main.this.showDialog(4);

break;

caseR.id.btn6:

Main.this.showDialog(5);

break;

}

}

}

@Override

publicDialogonCreateDialog(intid){

switch(id){

case0:

//一个简单的弹出对话框

returnnewAlertDialog.Builder(this).setTitle("这是一个简单的弹出对话框的Demo")

.create();

case1:

//一个相对复杂的弹出对话框

returnnewAlertDialog.Builder(this)

.setTitle("标题")//设置标题

//.setCustomTitle(View)//以一个View作为标题

.setIcon(R.drawable.icon01)//设置标题图片

//.setMessage("信息")//需要显示的弹出内容

.setPositiveButton("确定",newOnClickListener(){//设置弹框的确认按钮所显示的文本,以及单击按钮后的响应行为

@Override

publicvoidonClick(DialogInterfacea0,inta1){

TextViewtxtMsg=(TextView)Main.this.findViewById(R.id.txtMsg);

txtMsg.append("单击了对话框上的“确认”按钮\n");

}

})

.setItems(R.array.ary,newDialogInterface.OnClickListener(){//弹框所显示的内容来自一个数组。数组中的数据会一行一行地依次排列

publicvoidonClick(DialogInterfacedialog,intwhich){

}

})

//其他常用方法如下

//.setMultiChoiceItems(arg0,arg1,arg2)

//.setSingleChoiceItems(arg0,arg1,arg2)

//.setNeutralButton(arg0,arg1)

//.setNegativeButton(arg0,arg1)

.create();

case2:

//弹出对话框为指定的View的Demo

returnnewAlertDialog.Builder(this).setTitle("此对话框的内容是一个View")

.setView(this.findViewById(R.layout.view)).create();

case3:

//弹出日期选择对话框

Calendarc=Calendar.getInstance();

returnnewDatePickerDialog(this,newOnDateSetListener(){

@Override

publicvoidonDateSet(DatePickerview,intyear,intmonthOfYear,intdayOfMonth){

TextViewtxtMsg=(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));

case4:

//弹出时间选择对话框

Calendarc2=Calendar.getInstance();

returnnewTimePickerDialog(this,newOnTimeSetListener(){

@Override

publicvoidonTimeSet(TimePickerview,inthourOfDay,intminute){

TextViewtxtMsg=(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);

case5:

//弹出进度条对话框

ProgressDialogprogress=newProgressDialog(this);

progress.setMessage("loading...");

returnprogress;

default:

returnnull;

}

}

}

2、各种提示效果的演示

res/layout/main.xml

代码

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn3"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

<Buttonandroid:id="@+id/btn4"android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

</LinearLayout>

res/layout/view.xml

代码

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextViewandroid:id="@+id/txtMsg"android:layout_width="wrap_content"

android:layout_height="wrap_content">

</TextView>

</LinearLayout>

Main.java

代码

packagecom.webabcd.notification;

importandroid.app.Activity;

importandroid.app.Notification;

importandroid.app.NotificationManager;

importandroid.app.PendingIntent;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.TextView;

importandroid.widget.Toast;

publicclassMainextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//通过Tost.makeText().show()来实现提示性的通知效果

//短时间的提示性通知的Demo

Buttonbtn1=(Button)this.findViewById(R.id.btn1);

btn1.setText("短时间提示");

btn1.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

Toast.makeText(Main.this,"我是短时间提示",Toast.LENGTH_SHORT).show();

}

});

//长时间的提示性通知的Demo

Buttonbtn2=(Button)this.findViewById(R.id.btn2);

btn2.setText("长时间提示");

btn2.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

Toast.makeText(Main.this,"我是长时间提示",Toast.LENGTH_LONG).show();

}

});

//以一个View作为提示性通知的Demo

Buttonbtn3=(Button)this.findViewById(R.id.btn3);

btn3.setText("以一个View做提示");

btn3.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

Viewview=inflateView(R.layout.view);

TextViewtxtMsg=(TextView)view.findViewById(R.id.txtMsg);

txtMsg.setText("提示内容");

Toasttoast=newToast(Main.this);

toast.setView(view);

toast.setDuration(Toast.LENGTH_LONG);

toast.show();

}

});

Buttonbtn4=(Button)this.findViewById(R.id.btn4);

btn4.setText("发出一个通知(Notification)");

btn4.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

//实例化通知管理器

NotificationManagernm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);

//指定单击通知后所打开的详细的通知页面(单击通知后打开NotificationView)

PendingIntentcontentIntent=PendingIntent.getActivity(

Main.this,0,newIntent(Main.this,NotificationView.class),0);

//实例化一个通知,并指定其图标和标题(在提示栏上显示)

Notificationn=newNotification(R.drawable.icon01,"我是滚动的通知信息我是滚动的通知信息我是滚动的通知信息",System.currentTimeMillis());

//设置通知的发送人和通知的详细内容(打开提示栏后在通知列表中显示)

n.setLatestEventInfo(Main.this,"通知发送人","我是详细的通知信息我是详细的通知信息我是详细的通知信息",contentIntent);

//100毫秒延迟后,震动250毫秒,暂停100毫秒后,再震动500毫秒

n.vibrate=newlong[]{100,250,100,500};

//发出通知(其中第一个参数为通知标识符)

nm.notify(0,n);

}

});

}

//将指定的xml资源转换为一个View

privateViewinflateView(intresource){

LayoutInflatervi=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

returnvi.inflate(resource,null);

}

//打开详细通知页后此Activity会被Pause,从详细通知页返回后此Activity会被Resume

@Override

protectedvoidonPause(){

//TODOAuto-generatedmethodstub

super.onPause();

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

}

@Override

protectedvoidonResume(){

//TODOAuto-generatedmethodstub

super.onResume();

Log.d("MyDebug","onResume");

}

}

NotificationView.java

代码

packagecom.webabcd.notification;

importandroid.app.Activity;

importandroid.app.NotificationManager;

importandroid.os.Bundle;

importandroid.widget.TextView;

//单击通知列表的某个通知后,所打开的详细的通知页

publicclassNotificationViewextendsActivity{

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.view);

TextViewtxtMsg=(TextView)this.findViewById(R.id.txtMsg);

txtMsg.setText("点通知之后所链接到的Activity");

NotificationManagernm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);

//取消显示在通知列表中的指定通知(参数为通知标识符)

nm.cancel(0);

//需要关闭此Activity的话就finish它既可

//this.finish();

}

}

相关推荐