一、RemoteViews简介

作用:跨进程更新界面                         使用场景:通知栏、桌面小部件

二、在通知栏上的应用

原理:通过RemoteViews加载布局,通过remoteViews的set方法,载入View动态改变布局

(一)、Notifaction的使用:Notification的使用

(二)、利用RemoteView来自定义布局

步骤①、创建layout布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/show_linear"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/show_iv_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/show_tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World"/>
<TextView
android:id="@+id/show_tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="I am a super man"/>
</LinearLayout>
</LinearLayout>

notification_show

步骤②、利用RemoteViews动态修改布局

 Intent intent = new Intent(this,OtherActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
//利用Notification.Builder创建Notification
Notification.Builder notification = new Notification.Builder(this);
notification.setAutoCancel(true);
notification.setSmallIcon(R.mipmap.ic_launcher);
notification.setContentTitle("Hello World");
notification.setContentText("I am a ET");
notification.setContentIntent(pendingIntent);
/*利用RemoteViews动态修改layout的内容*/
//通过包名,和自定义的layout创建RemoteViews
RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.notification_show);
//修改View的内容
remoteViews.setImageViewResource(R.id.show_iv_icon,R.mipmap.ic_launcher);
remoteViews.setTextViewText(R.id.show_tv_title,"This is fine day");
remoteViews.setTextViewText(R.id.show_tv_content,"Do you want to go with me");
//对RemoteViews设置跳转
remoteViews.setOnClickPendingIntent(R.id.show_linear,pendingIntent);
//将notification的View设置为RemoteViews
notification.setContent(remoteViews);
notification.setContentIntent(pendingIntent);
//配置完成后,将builder转化为Notification
Notification notification1 = notification.getNotification();
//放入Notification管理器中
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0,notification1);

问:为什么更新View需要用到RemoteViews类(稍后讲解)

为什么需要用到PendingIntent。(说明Intent中所包含的意图必须由用户触发)

三、RemoteViews在桌面小部件上的应用(放弃,以后再说)

AppWidgetProvider是Android用于实现桌面小部件的类,本质上是一个广播(BroadcastRecevier)

步骤:①、定义小部件(在res/layout/下新建一个XML文件)  自 定 义

②、定义小部件配置信息(res/xml/下新建一个xml文件)

RemoteViews的理解和使用的更多相关文章

  1. Android开发艺术探索第五章——理解RemoteViews

    Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...

  2. Android自定义Notification并没有那么简单

    背景 最近需要实现一个自定义Notification的功能.网上找了找代码,解决方案就是通过RemoteViews来实现.但是在实现过程中遇到不少问题,网上也没有很好的文章描述这些问题,所以在这里做个 ...

  3. Android开发艺术探索》读书笔记 (5) 第5章 理解RemoteViews

    第5章 理解RemoteViews 5.1 RemoteViews的应用 (1)RemoteViews表示的是一个view结构,它可以在其他进程中显示.由于它在其他进程中显示,为了能够更新它的界面,R ...

  4. 完全理解Android中的RemoteViews

    一.什么是RemoteViews RemoteViews翻译过来就是远程视图.顾名思义,RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteView ...

  5. 第五章:理解RemoteViews

    RemoteView应该是一种远程View,表示的是一个View结构,他可以在其它进程中显示. 在android中使用场景有两种:通知栏和桌面小部件 5.1 RemoteView的应用 5.1.1 R ...

  6. Notification NotificationManager RemoteViews PendingIntent

    Notification和NotificationManager :可以用来实现可视化的消息通知等,比如:下载进度显示,消息显示,广播的内容等 RemoteViews :用于创建自定义的Notific ...

  7. Android RemoteViews 11问11答

    1.什么是RemoteView? 答:其实就是一种特殊的view结构,这种view 能够跨进程传输.并且这种remoteview 还提供了一些方法 可以跨进程更新界面.具体在android里面 一个是 ...

  8. Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去

    在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...

  9. Android 之窗口小部件高级篇--App Widget 之 RemoteViews

    Android 之窗口小部件高级篇--App Widget 之 RemoteViews 在之前的一篇博文(Android 之窗口小部件详解--App Widget)中,已经介绍了App Widget的 ...

随机推荐

  1. java 数字补齐0

    String str_f = str.substring(0, 1); int i = (Integer.parseInt(str.substring(1)) + 1); // 数字补齐0 Decim ...

  2. mac 键盘特殊标记

  3. opencv中的图像区域复制

    openCV作为已经成熟的开源库,很多操作它都已经有了高效,使用方便的方法.我的应用场景是这样的,从一张大图片中抠出一小部分,然后处理这一小部分后再放到大图像中.对于抠出来可以这样实现: Rect r ...

  4. c#POST请求和接收post请求

    c# post请求发送数据 /// <summary> /// POST请求 /// </summary> /// <param name="url" ...

  5. 关于Keil C51中using关键字的使用心得

    刚才看到一位很牛的师兄写的一篇日志中提到了Keil C51中using这个关键字的用法,粗心的我本来一直都没有留意它是用来干嘛的(因为我一般看见它都是在中断服务函数的定义开头处,好像没有了它也可以中断 ...

  6. C# 语法技巧_三目运算_switch_case

    一.三目运算符 三目运算符的一种简便写法: bool b = str == "abc" ? false : true; 当是自身时,实际上别吝啬那一个括号,有一个括号,实际上更容易 ...

  7. grep搜索当前目录和递归搜索子目录中文本文件的特定pattern

    一般在windows上文本编辑器notepad++,UE这些都有这些功能,Linux下就换了一种方式,用grep来完成文件中信息查找的方式. grep -R -n --include="*. ...

  8. TCP Keepalive HOWTO

    TCP Keepalive HOWTO Fabio Busatto <fabio.busatto@sikurezza.org> 2007-05-04 Revision History Re ...

  9. Cocos2d-x 架构一个游戏的一般思路

    采用下面的步骤来实现游戏逻辑: 通过应用程序代理类来初始化第一个CCScene(即AppDelegate里面的第一个CCScene), CCScene里面实例化一个或者多个CCLayer,并把它们当作 ...

  10. Linux 多线程开发

    在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反, ...