Android进阶知识树——RemoteViews详解

1、初识RemoteViews

在我们平时的开发中,使用RemoteViews的机会并不是很对,可能多数还是在自定义通知界面时,但RemoteViews凭借可以跨进程更新的特点,可以帮助我们实现不同的产品效果,Android中官方的使用就是通知和桌面小部件,今天就一起来看看它是如和使用和如何跨进程传输的;

简介

1.1、控制限制
  • 对于小工具可用的唯一手势
  1. 触摸
  2. 垂直滑动
1.2、 支持布局

RemoteViews虽然可以很容易的实现跨进程的控制视图,但并非所有的View都支持跨进程使用,根据GooGle官方文档指出只支持以下ViewGroup和View,不知持他们的子类和自定义View,所以在写RemoteViews的布局文件时应注意选择

  • 支持的布局
  1. FrameLayout
  2. LinearLayout
  3. RelativeLayout
  4. GridLayout
  • 支持的View
  1. 一般View:Button、ImageButton、TextView、ImageView、ProgressBar
  2. 集合:ListView、GridView、StackView、AdapterViewFlipper
  3. 其余View:AnalogClock、Chronometer、ViewFlipper

2、自定义通知界面

2.1、Notification

通知中的使用比较简单也比较固定,创建RemoteViews导入布局并设置点击事件,然后将视图设置为通知的contentView:

RemoteViews notificationLayout = new RemoteViews(getPackageName(), R.layout.notification);
notificationLayout.setOnClickPrndingIntent(,)//设置布局中的点击事件(单个View的PendingIntent)
notification.contentView = notificationLayout
notification.contentIntent =// 设置整个通知的PendingIntent

3、AppWidget

另一个使用场景就是桌面小部件,桌面小部件确实丰富了产品的使用,更方便了用户的适应这点本人在开发中涉及到的很少,AppWidget的开发虽然比通知使用复杂一些但也是有章可循,只要遵循每一步的流程即可实现,下面一起实现一个桌面小部件:

3.1、AppWidgetProvider

AppWidgetProvider是BroadcastReceive的子类,主要用于接收小部件操作或修改时的广播意图,AppWidget会根据状态的不同发送以下广播:

  • ACTION_APPWIDGET_UPDATE:在每个小部件更新时发送广播
  • ACTION_APPWIDGET_DELETED:在每次删除小部件时发送广播
  • ACTION_APPWIDGET_ENABLED:第一次添加小部件时发送广播
  • ACTION_APPWIDGET_DISABLED:删除最后一个小部件时发送广播
  • ACTION_APPWIDGET_OPTIONS_CHANGED:当AppWidget内容修改时发送广播

AppWidgetProvider除了直接监听广播外,其内部简化了广播的使用,提供了不同状态的回调方法,在开发中也主要使用这些方法即可,具体如下:

  1. onUpdate():桌面小部件的更新方法,当用户添加App Widget时会回调一次,然后会按照updatePeriodMillis间隔循环调用
  2. onAppWidgetOptionsChanged():首次创建布局窗口时或窗口大小调整时回调
  3. onDelete():每次删除桌面小部件时都会回调此方法
  4. onEnabled(Context):仅在第一次添加AppWidget实例时回调此方法(可执行初始化操作,如:打开数据库)
  5. onDisabled(Context):当删除最后一个小部件时回调(可以执行清理操作:如删除数据库)

既然AppWidgetProvider是广播的子类,所以它的使用也必须在清单文件中完成注册:

<receiver android:name="MyAppWidgetProvider">
        <intent-filter>
        //配置AppWidget的意图过滤
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
       </intent-filter>
        // 添加设置appwidget_info的xml文件
       <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/example_appwidget_info" />
</receiver>
3.2、ConfigActivity

ConfigActivity顾名思义,用来设置桌面小部件,它在第一次添加小部件时会直接接入配置界面,可以在其中提供RemoteViews的相关配置,在配置完成后退出活动即可自动更新视图,具体实现方式分两步:

  • 创建Activity并在清单文件中配置隐式启动
<activity android:name=".OtherActivity">
    <intent-filter>
        //必须设置APPWIDGET_CONFIGURE意图用于隐式启动活动
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
    </intent-filter>
</activity>
  • 在AppWidgetProviderInfo XML文件中声明配置活动
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:configure="com.alex.kotlin.remoteview.OtherActivity">
</appwidget-provider>
  • 使用细节
  1. 在配置结束后在返回的setResult()中,必须返回本次修改的AppWidget的ID
3.3、AppWidgetProviderInfo

AppWidgetProviderInfo主要用于设置AppWidget的基本数据,如:布局、尺寸、更新频率等,所有信息设置在xml文件中,并在清单文件中配置xml文件:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="40dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen">
</ap
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值