展会信息港展会大全

扩展用户体验-Dialog,Toast,Notification android开发学习教程
来源:互联网   发布日期:2015-10-03 11:38:53   浏览:2341次  

导读:创建一个Dialog对话框实例化一个Dialog实例,设置标题和布局,分别使用setTitle和setContentView。例子:// Create the new Dialog. Dialog dialog = new Dialog(MyActivity.this);// Set the title......

创建一个Dialog对话框

实例化一个Dialog实例,设置标题和布局,分别使用setTitle和setContentView。

例子:

// Create the new Dialog.

Dialog dialog = new Dialog(MyActivity.this);

// Set the title.

dialog.setTitle( Dialog Title );

// Inflate the layout.

dialog.setContentView(R.layout.dialog_view);

// Update the Dialog s contents.

TextView text = (TextView)dialog.findViewById(R.id.dialog_text_view);

text.setText( This is the text in my dialog );

// Display the Dialog.

dialog.show();

使用AlertDialog类

去构建一个AlertDialog的UI,需要创建一个新的AlertDialog.Builder对象:

AlertDialog.Builder ad = new AlertDialog.Builder(context);

你可以用此来设置标题、消息,还可以设置按钮,选择条目,文本输入框。还能设置事件监听。

下面的例子使用AlertDialog去显示消息和2个按钮:

Context context = MyActivity.this;

String title =It is Pitch Black ;

String message =You are likely to be eaten by a Grue. ;

String button1String =Go Back ;

String button2String =Move Forward ;

AlertDialog.Builder ad = new AlertDialog.Builder(context);

ad.setTitle(title);

ad.setMessage(message);

ad.setPositiveButton(

button1String,

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int arg1) {

eatenByGrue();

}

}

);

ad.setNegativeButton(

button2String,

new DialogInterface.OnClickListener(){

public void onClick(DialogInterface dialog, int arg1) {

// do nothing

}

}

);

使用setCancelable方法去决定是否用可以按回退按钮关掉对话框,而不是作出一个选择。

ad.setCancelable(true);

ad.setOnCancelListener(

new DialogInterface.OnCancelListener() {

public void onCancel(DialogInterface dialog) {

eatenByGrue();

}

}

);

几个特殊的输入对话款

1.CharacterPickerDialog 不感兴趣!

2.DatePickerDialog 选择日期用的。

3.TimePickerDialog 选择时间用的。

4.ProgressDialog 进度条。

使用DialogFragment来管理和显示对话框

直接看例子:

public class MyDialogFragment extends DialogFragment {

private static String CURRENT_TIME =CURRENT_TIME ;

public static MyDialogFragment newInstance(String currentTime) {

// Create a new Fragment instance with the specified

// parameters.

MyDialogFragment fragment = new MyDialogFragment();

Bundle args = new Bundle();

args.putString(CURRENT_TIME, currentTime);

fragment.setArguments(args);

return fragment;

}

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

// Create the new Dialog using the AlertBuilder.

AlertDialog.Builder timeDialog =

new AlertDialog.Builder(getActivity());

// Configure the Dialog UI.

timeDialog.setTitle( The Current Time Is... );

timeDialog.setMessage(getArguments().getString(CURRENT_TIME));

// Return the configured Dialog.

return timeDialog.create();

}

}

显示一个Dialog Fragment

String tag =my_dialog ;

DialogFragment myFragment =

MyDialogFragment.newInstance(dateString);

myFragment.show(getFragmentManager(), tag);

自定义Dialog Fragment的视图:

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the Dialog s UI.

View view = inflater.inflate(R.layout.dialog_view, container, false);

// Update the Dialog s contents.

TextView text = (TextView)view.findViewById(R.id.dialog_text_view);

text.setText( This is the text in my dialog );

return view;

}

没错就是这个正常不过的方法。

让Activity变成对话框

<activity android:name= MyDialogActivity

android:theme= @android:style/Theme.Dialog >

</activity>

Toast

太熟悉了。小例子:

Context context = this;

String msg =To health and happiness! ;

int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, msg, duration);

toast.show();

自定义Toast

例子:去放置一个Toast在屏幕的底部,使用setGravity方法。

Context context = this;

String msg =To the bride and groom! ;

int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, msg, duration);

int offsetX = 0;

int offsetY = 0;

toast.setGravity(Gravity.BOTTOM, offsetX, offsetY);

toast.show();

你可以之定义一个View或者布局,使用setView方法:

Context context = getApplicationContext();

String msg =Cheers! ;

int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, msg, duration);

toast.setGravity(Gravity.TOP, 0, 0);

LinearLayout ll = new LinearLayout(context);

ll.setOrientation(LinearLayout.VERTICAL);

TextView myTextView = new TextView(context);

CompassView cv = new CompassView(context);

myTextView.setText(msg);

int lHeight = LinearLayout.LayoutParams.FILL_PARENT;

int lWidth = LinearLayout.LayoutParams.WRAP_CONTENT;

ll.addView(cv, new LinearLayout.LayoutParams(lHeight, lWidth));

ll.addView(myTextView, new LinearLayout.LayoutParams(lHeight, lWidth));

ll.setPadding(40, 50, 0, 50);

toast.setView(ll);

toast.show();

注意:Toast也认为是UI的部分,切不要在后台线程中直接show!!

Notification

可以用来在状态栏上显示图标和信息、使LED灯闪烁、震动手机、铃声或者音乐提醒、显示额外的信息、使用可交互的控制手段。

介绍Notification Manager

顾名思义就是用来管理Notification,包括触发一个新的Notification、修改存在的、取消Notifications。

String svcName = Context.NOTIFICATION_SERVICE;

NotificationManager notificationManager;

notificationManager = (NotificationManager)getSystemService(svcName);

创建一个Notification和配置在状态栏上的显示(所以下面说的是在状态栏上显示的那部分,Notification托盘在后面会说)

// Choose a drawable to display as the status bar icon

int icon = R.drawable.icon;

// Text to display in the status bar when the notification is launched

String tickerText =Notification ;

// The extended status bar orders notification in time order

long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);

ticker文本应该是作为一个简单的描述来通知用户,比如短信或者email的主题等。

你可以设置Notification对象的number属性来显示状态栏上事件触发的次数。比如:

notification.number++;

在Android 3.0(API 11)引入了Notification.Builder类,所谓简化操作用的。

最简单的方式去给你的Notification增加声音、灯光、震动,使用默认的设置。使用defaults属性:

Notification.DEFAULT_LIGHTS

Notification.DEFAULT_SOUND

Notification.DEFAULT_VIBRATE

notification.defaults = Notification.DEFAULT_SOUND |

Notification.DEFAULT_VIBRATE;

你若想使用全部的默认值,则使用Notification.DEFAULT_ALL常量。

用铃声来提示

Uri ringURI =

RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

notification.sound = ringURI;

这里是默认的铃声,不过只要Uri对了,你可以使用任意的铃声。

振动设备

振动不同于其他,需要权限:

<uses-permission android:name= android.permission.VIBRATE />

去设置振动模式,需要有一个long[]。这个数组中的值代表时间的长度(毫秒),然后轮流下一个值代表暂停的时间。

long[] vibrate = new long[] { 1000, 1000, 1000, 1000, 1000 };

notification.vibrate = vibrate;

解释下片段代码:振一秒停一秒,持续5秒。

闪烁LED灯

你可以配置的有:颜色、闪烁的频率。

但是有些设备可能不支持颜色这个,但是你设置了,有就帮你显示,木有就算了,默认呗。

ledARGB属性用来设置颜色,ledOffMS和ledOnMS用来设置频率和闪烁LED灯的模式。

你可以设置ledOnMS属性为1,然后ledOffMS属性为0。或者呢,两个属性都为0。

如何设置呢?

答:首先FLAG: Notification.FLAG_SHOW_LIGHTS是必须的。

notification.ledARGB = Color.RED;

notification.ledOffMS = 0;

notification.ledOnMS = 1;

notification.flags = notification.flags | Notification.FLAG_SHOW_LIGHTS;

使用Notification Builder

前面已经说过,3.0引入的。

直接看例子吧,一看就懂:

Notification.Builder builder =

new Notification.Builder(MyActivity.this);

builder.setSmallIcon(R.drawable.ic_launcher)

.setTicker( Notification )

.setWhen(System.currentTimeMillis())

.setDefaults(Notification.DEFAULT_SOUND |

Notification.DEFAULT_VIBRATE)

.setSound(

RingtoneManager.getDefaultUri(

RingtoneManager.TYPE_NOTIFICATION))

.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 })

.setLights(Color.RED, 0, 1);

Notification notification = builder.getNotification();

设置和自定义Notification托盘的UI

1.使用setLatestEventInfo方法来更新在Notification托盘上信息细节的显示。

2.设置contentView和contentIntent属性来自定义UI,使用Remote View对象。(尼玛这是什么)

3.从3.0开始,你可以设置Remote View中的每个View的Broadcast Intents。

使用标准的Notification UI

最简单的方式就是使用setLatestEventInfo方法去指定标题和文本来设置默认的Notification托盘布局。

notification.setLatestEventInfo(context,

expandedTitle,

expandedText,

launchIntent);

你指定的PendingIntent ,会在用户点击了Notification后触发。

Android 3.0(API level 11)拓展了每个Notifcation的大小,支持larger icon。

builder.setSmallIcon(R.drawable.ic_launcher)

.setTicker( Notification )

.setWhen(System.currentTimeMillis ())

.setContentTitle( Title )

.setContentText( Subtitle )

.setContentInfo( Info )

.setLargeIcon(myIconBitmap)

.setContentIntent(pendingIntent);

别的不多说,对应着图看吧。

Notification还支持里面装有ProgressBar:

builder.setSmallIcon(R.drawable.ic_launcher)

.setTicker( Notification )

.setWhen(System.currentTimeMillis())

.setContentTitle( Progress )

.setProgress(100, 50, false)

.setContentIntent(pendingIntent);

创建一个自定义的Notification UI

注意:RemoteViews中布局的View有严格的限制(估计就只能有ImageView,TextView,ProgressBar)

RemoteViews myRemoteView =

new RemoteViews(this.getPackageName(),

R.layout.my_notification_layout);

builder.setSmallIcon(R.drawable.notification_icon)

.setTicker( Notification )

.setWhen(System.currentTimeMillis())

.setContentTitle( Progress )

.setProgress(100, 50, false)

.setContent(myRemoteView);

Android 3.0前,你需要:

Intent intent = new Intent(this, MyActivity.class);

PendingIntent pendingIntent

= PendingIntent.getActivity(this, 0, intent, 0);

notification.contentView = new RemoteViews(this.getPackageName(),

R.layout.my_status_window_layout);

notification.contentIntent = pendingIntent;

注意:如果你要contentView,pendingIntent不可少,不然要报错。

设置ContentView中的视图

notification.contentView.setImageViewResource(R.id.status_icon,

R.drawable.icon);

notification.contentView.setTextViewText(R.id.status_text,

Current Progress: );

notification.contentView.setProgressBar(R.id.status_progress,

100, 50, false);

Android 4.0(API 14)你还可以为ContentView中的View设置点击事件,然后触发一个广播。

Intent newIntent = new Intent(BUTTON_CLICK);

PendingIntent newPendingIntent =

PendingIntent.getBroadcast(MyActivity.this, 2, newIntent, 0);

notification.contentView.setOnClickPendingIntent(

R.id.status_progress, newPendingIntent);

自定义Ticker View

在某些设备,尤其是平板设备,你能指定一个代替Notification Ticker文本的Remote View对象,显示在系统栏中。

RemoteViews myTickerView =

new RemoteViews(this.getPackageName(),

R.layout.my_ticker_layout);

builder.setSmallIcon(R.drawable.notification_icon)

.setTicker( Notification , myTickerView)

.setWhen(System.currentTimeMillis())

.setContent(myRemoteView);

注意:ticker的文本不能省,有些设备不支持自定义ticker view>

配置Ongoing,Insistent的Notification

你能配置Notification为引人注目或者不间断的,通过设置FLAG_INSISTENT和FLAG_ONGOING_EVENT标识。

Ongoing模式下的Notification,用来代表事件正在进行(比如正在下载,正在后台播放音乐)。

Builder:

builder.setSmallIcon(R.drawable.notification_icon)

.setTicker( Notification )

.setWhen(System.currentTimeMillis ())

.setContentTitle( Progress )

.setProgress(100, 50, false)

.setContent(myRemoteView)

.setOngoing(true);

非Builder:

notification.flags = notification.flags |

Notification.FLAG_ONGOING_EVENT;

Insistent Notification 不断重复动作:它的声音、振动、LED光,持续着,除非被取消。

notification.flags = notification.flags |

Notification.FLAG_INSISTENT;

不过这个还是少用,会烦死人。Builder没有对应的设置。

触发、更新、取消Notification

触发一个Notification

String svc = Context.NOTIFICATION_SERVICE;

NotificationManager notificationManager

= (NotificationManager)getSystemService(svc);

int NOTIFICATION_REF = 1;

Notification notification = builder.getNotification();

notificationManager.notify(NOTIFICATION_REF, notification);

这个Notification ID很重要,用来取消和更新。

更新:(如果更新不想再触发振动、闪光之类的动作,可以设置setOnlyAlertOnce)

builder.setSmallIcon(R.drawable.notification_icon)

.setTicker( Updated Notification )

.setWhen(System.currentTimeMillis ())

.setContentTitle( More Progress )

.setProgress(100, 75, false)

.setContent(myRemoteView)

.setOngoing(true)

.setOnlyAlertOnce(true);

Notification notification = builder.getNotification();

notificationManager.notify(NOTIFICATION_REF, notification);

非Buider:

notification.flags = notification.flags |

Notification.FLAG_ONLY_ALERT_ONCE;

取消:(可以设置setAutoCancel就可以点击后自动取消)

builder.setSmallIcon(R.drawable.ic_launcher)

.setTicker( Notification )

.setWhen(System.currentTimeMillis())

.setContentTitle( Title )

.setContentText( Subtitle )

.setContentInfo( Info )

.setLargeIcon(myIconBitmap)

.setContentIntent(pendingIntent)

.setAutoCancel(true);

非Builder:

notification.flags = notification.flags |

Notification.FLAG_AUTO_CANCEL;

直接取消可以:

notificationManager.cancel(NOTIFICATION_REF);

赞助本站

人工智能实验室

相关热词: Dialog

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港