一、什么是RemoteViews
RemoteViews翻译过来就是远程视图.顾名思义,RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteViews之间依赖Binder实现了进程间通信.
二、RemoteViews的用法
RemoteViews使用最多的场合是通知栏和桌面小插件. 以通知栏为例,讲解下它的用法.
1、新建一个Notification
这里要注意是在android3.0之前都是使用如下的形式构建一个Notification
// 1.新建一个Notification对象
Notification mNotification = new Notification();
// 2.添加属性,比如标题、内容、优先级、图片等
mNotification.tickerText = "这是通知栏的标题";
mNotification.icon = R.drawable.ic_launcher;
mNotification.flags=Notification.FLAG_NO_CLEAR;
mNotification.setLatestEventInfo(this, "这是内容", "这是标题", null);
在3.0之后官方推荐使用建造者模式创建Notification.
Notification mNotification = new Notification.Builder(this)
.setContentTitle("这是标题 ")
.setContentText("这是内容")
.setSmallIcon(R.drawable.ic_launcher)
.build();
Notification有很多属性,这里列举一些
- setContentTitle 设置标题
- setContentText 设置内容
- setLargeIcon 设置通知栏大图标
- setSmallIcon 设置通知栏小图标
- setContent 设置RemoteViews
- setContentIntent 当通知条目被点击,就执行这个被设置的Intent.
- setDeleteIntent 当用户点击"Clear All Notifications"按钮区删除所有的通知的时候,这个被设置的Intent被执行
- setLights 设置闪光灯
- setSound 设置声音
- setPriority 设置优先级
2、设置Notification的RemoteViews
如果要给通知栏使用自定义布局就要使用RemoteViews了,传入包名和相应的布局.
RemoteViews mRemoteViews=new RemoteViews("com.example.remoteviewdemo", R.layout.remoteview_layout);
然后通过setContent()传入RemoteViews 对象即可.
这里顺便讲一下PendingIntent,PendingIntent是”延迟意图”的意思,就是当满足某一条件时出触发这个Intent.通过PendingIntent的getActivity、getBroadcast、getService等分别构建一个打开对应组件的延迟Intent.
传入四个参数,context、intent、requestCode(自定义)、flag.
Intent intent=new Intent(MainActivity.this,MainActivity.class);
PendingIntent mPendingIntent=PendingIntent.getActivity(MainActivity.thi