RemoteView:远程View

QuibblerQuibbler 2020-04-10 约 5 分钟 1964 次阅读

RemoteView:远程View

RemoteViews,顾名思义,就是远程的View,也就是可以运行在其他进程中的View。RemoteViews常用在Notification和桌面小组件AppWidgetProvider中。

Google官方文档:RemoteViews

1、支持的组件

RemoteViews不支持所有的View类型,也不支持自定义View。

ViewGroup:

FrameLayout    LinearLayout    RelativeLayout    GridLayout

View:

        AnalogClock    button    Chronometer    ImageButton    ImageView    ProgressBar    

        TextView    ViewFlipper    ListView    GridView    StackVie    AdapterViewFlipper    ViewStub

如果在RemoteViews加载的布局中加入了不支持的View会显示异常,但是现在框架已经屏蔽倒不至于出现奔溃。

2、RemoteView方法

访问RemoteViews的view元素,通过一系列set方法完成。详细方法参考Google文档。

方法名作用
setTextViewText(int viewId,CharSequence text)设置TextView的文本内容 第一个参数是TextView的id 第二个参数是设置的内容。
setTextViewTextSize(int viewId, int units, float size)设置TextView的字体大小 第二个参数是字体的单位。
setTextColor(int viewId, int color)设置TextView字体颜色。
setImageViewResource(int viewId, int srcId)设置ImageView的图片
setInt(int viewId,String methodName, int value)反射调用View对象的参数类型为Int的方法 比如上述的setImageViewResource的方法内部就是这个方法实现 因为srcId为int型参数。
setLong setBoolean类似于setInt。
setOnClickPendingIntent(int viewId,PendingIntent pendingIntent)添加点击事件的方法

3、RemoteView点击

对于点击事件 ,RemoteViews中只支持PendingIntent,不支持onClicklistener。

绝大多数情况下都是对单个的View设置点击操作。通过setOnClickPendingIntent(int viewId, PendingIntent pendingIntent)方法设置点击事件对应的PendingIntent。关于PendingIntent这里不再多说,参考PendingIntent初识。

remoteViews.setOnClickPendingIntent(R.id.text, pendingIntent);

注意上面的setOnClickPendingIntent(int viewId, PendingIntent pendingIntent)方法不能个ListView、StackView等view集合中的item设置点击事件,因为开销太大系统禁止了(从RemoteViews的实现也可以看出这样的实现不高效)。

如果要给ListView、StackView中的item添加点击事件,必须使用setPendingIntentTemplate()和setOnClickFillInIntent()方法的组合。

4、RemoteView用途

RemoteView只在两个场景用到:Notification和桌面小组件AppWidgetProvider中。具体用法参考另外那两篇博客。

5、RemoteView原理

参考AOSP源码阅读专题:RemoteViews实现原理。

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w