Android Widget小组件

Widget基本使用详细说明:

http://blog.csdn.net/sasoritattoo/article/details/17616597

Widget的基本使用:

  • 在工程res/layout目录下创建一个widget的layout(widget.xml)

在这里插入图片描述

  • 在工程res/xml目录下创建资源文件appwidget-provider,一般设置常用属性:
<appwidget-provider xmlns:android=“http://schemas.android.com/apk/res/android”
     android:minWidth=100dp”
     android:minHeight=100dp”
     android:updatePeriodMillis=10000”
     android:initialLayout=@layout/widget”/>

minWidth:指定widget最小宽度
minHeight:指定widget最小高度
updatePeriodMillis:指定更新时间频率,默认30分钟,若指定的时间小于默认时间,也会被自动指定为30分钟
initialLayout:widget控件的布局
  • 创建一个类继承AppWidgetProvider(AppWidgetProvider是BroadcastReceiver的子类),一般会重写以下几个方法:

    • onDeleted():widget被删除的时候触发该方法

    • onDisabled():最后一个widget被删除的时候触发

    • onEnabled():第一次添加widget的时候触发,如果再此添加widget,不会触发该方法

    • onReceive():接收到任意广播的时候触发,会比以上的几个方法先执行

AppWidgetProvider案例:

public class WidgetProvider extends AppWidgetProvider {

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
    }

    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        //在删除widget的时候停止服务
        context.stopService(new Intent(context, WidgetService.class));
    }

    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
        //在第一个执行创建widget的时候开启服务
        context.startService(new Intent(context, WidgetService.class));
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}
  • 创建一个类继承Service,通过Timer等控件定期更新widget

Service更新widget案例(一个TextView显示时间):

public class WidgetService extends Service {

    private Timer timer;
    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                updateWidgetView();
            }
        }, 0, 1000);
    }

    private void updateWidgetView() {
        String time = format.format(new Date());
        RemoteViews remoteViews = new RemoteViews(getPackageName(),
                R.layout.widget);
        remoteViews.setTextViewText(R.id.timeTv, time);
        AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
        ComponentName componentName = new ComponentName(getApplicationContext(), WidgetProvider.class);
        manager.updateAppWidget(componentName, remoteViews);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        timer = null;
    }
}
  • 在清单文件AndroidManifest.xml配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.exmaple.widget">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=.WidgetService"/>
        <receiver android:name=".WidgetProvider">
            <intent-filter>
                <action android:name=“android.appwidget.action.APPWIDGET_UPDATE"/> 
            </intent-filter>
            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config"/>
        </receiver>
    </application>

</manifest>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值