【Android】Android桌面小组件开发流程梳理

1. 新建小组件UI布局

在res/layout下创建小组件xml文件,例如:
在这里插入图片描述
注意事项:Widget并不支持所有的控件跟布局(小组件的初衷也只是展示一些简单信息)
1)支持布局:

FrameLayout
LinearLayout
RelativeLayout
GridLayout

2)支持控件:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper

2. 定义小组件配置信息

在res/xml下创建小组件配置信息,例如:
在这里插入图片描述
在这里插入图片描述
常见参数解释:

  • configer:在用户添加应用微件时启动以便用户配置应用微件属性的Activity
  • minWidth/minHeight:指定应用微件默认情况下占用的最小空间
  • minResizeWidth/minResizeHeight:指定应用微件的绝对最小大小
  • previewImage:用户在选择应用微件时看到的预览图
  • resizeMode:指定可以按什么规则来调整微件的大小,属性的值包括“horizontal”、“vertical”和“none”
  • targetCellHeight/targetCellWidth:添加到主机时小部件的默认高度/宽度,跟minWidth与minHeight类似
  • updatePeriodMillis:通过调用onUpdate()回调方法来从AppWidgetProvider请求更新的频率应该是多大
  • initialLayout:用于定义应用微件布局的布局资源
  • widgetCategory:用来确定此小部件是否可以显示在主屏幕、键盘或两者上

3. 使用AppwidgetProvider类

为自己的小组件创建一个继承自AppwidgetProvider的类,AppWidgetProvider类本质就是一个广播接收者,在其内部可以监听到小组件的一些生命周期,可以用来更新小组件、处理一些逻辑等,例如:

public class MyAppWidget extends AppWidgetProvider {
    /**
     * 接收窗口小部件点击时发送的广播
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }
    /**
     * 每次窗口小部件被更新都调用一次该方法
     * 与上面updatePeriodMillis是对应的
     */
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
    /**
     * 每删除一次窗口小部件就调用一次
     */
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
    }
    /**
     * 当该窗口小部件第一次添加到桌面时调用该方法
     */
    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
    }
    /**
     * 当最后一个该窗口小部件删除时调用该方法
     */
    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
    }
    /**
     * 当小部件大小改变时
     */
    @Override
    public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
        super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
    }
    /**
     * 当小部件从备份恢复时调用该方法
     */
    @Override
    public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
        super.onRestored(context, oldWidgetIds, newWidgetIds);
    }
}

4. 在AndroidManifest清单文件中声明配置

<!-- 倒数日小组件 -->
<receiver
   android:name=".widget.CountdownDaysSmallWidget"
   android:exported="true">
   <meta-data
       android:name="android.appwidget.provider"
       android:resource="@xml/widget_countdown_days_small_provider" />
   <intent-filter>
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
</receiver>

参考官方文档:
https://developer.android.google.cn/guide/topics/appwidgets?hl=zh-cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值