美文网首页
安卓桌面小组件

安卓桌面小组件

作者: 陈大吼 | 来源:发表于2022-09-13 12:43 被阅读0次

    1.小组件声明

    在<application>中声明<receiver>,相当于是注册广播接收者

    <receiver android:name=".TestWidgetProvider" >
          <intent-filter>
               <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
               <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
               <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
               <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
            </intent-filter>
    
           <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/test_widget" />
    </receiver>
    

    其中必须有<meta-data>,name固定为"android.appwidget.provider",resource指定小组件的UI样式:
    test_widget.xml定义在res/xml/目录下:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="54dp"
        android:minHeight="54dp"
        android:updatePeriodMillis="1800000"
        android:initialLayout="@layout/layout_test_widget"
        android:previewImage="@drawable/icon_hot_spot_label"
        android:resizeMode="horizontal"
        android:widgetCategory="keyguard|home_screen">
    </appwidget-provider>
    

    其中widgetCategory指定了 widget 能显示的地方:能否显示在 home Screen 或 lock screen 或 两者都可以。previewImage指定在小组件管理工具里的图标,initialLayout指定挪到桌面上之后的样式:
    layout_test_widget.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <ImageView
            android:layout_width="52dp"
            android:layout_height="52dp"
            android:scaleType="fitXY"
            android:src="@drawable/icon_hot_spot_label" />
    </FrameLayout>
    

    有了上述声明和定义,在小组件管理工具里便能看到该小组件,即使没有.TestWidgetProvider类
    2.小组件逻辑实现
    逻辑实现便是依赖.TestWidgetProvider类,来处理<receiver>中定义的不同action消息,这里简单举例,写个空壳类:

    class TestWidgetProvider : AppWidgetProvider() {
        override fun onUpdate(
            context: Context?,
            appWidgetManager: AppWidgetManager?,
            appWidgetIds: IntArray?
        ) {
        }
    }
    

    更多细节参看https://blog.csdn.net/ymtianyu/article/details/115178619

    相关文章

      网友评论

          本文标题:安卓桌面小组件

          本文链接:https://www.haomeiwen.com/subject/cjxhortx.html