UI控件--桌面小组件(1)

  • 我们手机上安装的软件一般都会带一些小组件,这些小组件一般可以增加用户体验,更好的将自己的服务呈现给用户,我们就来看看最简单的小组件的使用。
  • 所谓桌面小控件,就是能之间显示在Android系统桌面的小程序。
    桌面小控件的实现是基于Broadcast的形式实现的,因此,每一个桌面小控件都对应于一个BroadcastReceiver类。Android系统提供了一个AppWidgetProvider类(它就是BroadcastReceiver的子类),这个类很关键,你在写桌面小控件时只需继承这个类就行。继承了AppWidgetProvider类之后,你可以根据自己的需要覆盖它的不同的生命周期的方法,来达到自己的目的。

1.在res/xml下创建配置文件appwidget_provider.xml。


<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="100dp"
    android:minHeight="30dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/layout_widget">
appwidget-provider>
  • minWidth和minHeight
  • 高度宽度就不说了
  • android:updatePeriodMillis
  • 规定了这个插件的更新的频率,一旦到了这个频率就执行onUpdate里面的代码,安卓系统为了不让插件太占用系统电量和内存,规定android:updatePeriodMillis这个值不能低于30分钟,也就是1800000毫秒,低于这个值的会自动默认为30分钟,那么我们要实现每分钟更新一次系统时间就得自己调用Service或者广播来实现,手动更新这篇博客先不讲,下篇在详细讲解
  • Android:initialLayout这个表示插件的布局文件,用@layout引用。

2、通过扩展系统类AppWidgetProvider来实现,主要是重写里面的函数来完成你所需要的功能。

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.d("haha","小组件被调用了");
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
        Log.d("haha","小组件被删除了");
    }
  • 上述两个方法,会在小组件添加和删除的时候调用,这篇博客只讲解让最简单的小组件显示出来,下篇在讲解内容的展示等逻辑。

3、配置文件布局appwidget_provider.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="我是最简单的小组件"
        android:textColor="#000000"
        android:id="@+id/textView" />

LinearLayout>
  • 这个布局文件就是小组件的呈现的布局,我只是在里面添加了一个TextView显示了一行文本内容而已。

4.在AndroidManifest文件中进行注册

        <receiver
            android:name=".MyWedget"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <category android:name="android.intent.category.DEFAULT" />
            intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/appwidget_provider" />
        receiver>
  • 在前面已经说了,桌面小控件的实现是基于Broadcast的形式实现的,因此我们需要在AndroidManifest对其进行注册。

UI控件--桌面小组件(1)_第1张图片

你可能感兴趣的:(Android)