zoukankan      html  css  js  c++  java
  • Android-Widget桌面小组件

    1,

    掌握Widget的用:
    Widget的用途,能够添加到手机桌面的程序

    2,

    Widget的特点和用法步骤:

    特点:快捷,方便,个性化,可自定义功能,可及时控制更新Widget显示内容

    3,

     用法步骤流程图

    1. 绘制Widget布局
    2. 配置Widget的基本属性
    3. 定义AppWidgetProvider
    4. 提供Configuration Activity

    4,

    Android Widget实现一个基础的时钟功能

    效果:

    • 可以自动更新时间
    • 可以添加和删除时钟Widget

    5,

    完整代码:

    package com.example.widget;
    
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.RemoteViews;
    
    /**
     * 类似广播,是桌面小组件Widget的Provider
     */
    public class widget extends AppWidgetProvider {
    
        static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                    int appWidgetId) {
            CharSequence widgetText = context.getString(R.string.appwidget_text);
            // Construct the RemoteViews object
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
            views.setTextViewText(R.id.tv, widgetText);
            // Instruct the widget manager to update the widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    
        //刷新widget的时候执行,remoteView和AppWidgetManager
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            // There may be multiple widgets active, so update all of them
            for (int appWidgetId : appWidgetIds) {
                updateAppWidget(context, appWidgetManager, appWidgetId);
            }
        }
    
        //第一个widget添加到屏幕上执行
        @Override
        public void onEnabled(Context context) {
            // Enter relevant functionality for when the first widget is created
            super.onEnabled(context);
            //启动Service
            context.startService(new Intent(context, TimerService.class));
        }
    
        //最后一个widget被从屏幕移除执行
        @Override
        public void onDisabled(Context context) {
            // Enter relevant functionality for when the last widget is disabled
            super.onDisabled(context);
            context.stopService(new Intent(context, TimerService.class));
        }
    
        //Widget被从屏幕移除
        @Override
        public void onDeleted(Context context, int[] appWidgetIds) {
            super.onDeleted(context, appWidgetIds);
        }
    
        //这个方法一般不会重写,无论操作中间(上面)的哪些方法,都会执行onReceive
        @Override
        public void onReceive(Context context, Intent intent) {
            super.onReceive(context, intent);
        }
    
    }
    

     service:

    package com.example.widget;
    
    import android.app.Service;
    import android.appwidget.AppWidgetManager;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.os.IBinder;
    import android.widget.RemoteViews;
    
    import androidx.annotation.Nullable;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class TimerService extends Service {
    
        //java.util.Timer下的定时器
        private Timer timer;
    
        private SimpleDateFormat sdf = 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() {
                    updateViews();
                }
            }, 0, 1000);
        }
    
        private void updateViews() {
            String time = sdf.format(new Date());
            RemoteViews rv = new RemoteViews(getPackageName(), R.layout.widget);
            rv.setTextViewText(R.id.tv, "黄朝阳666 : " + time);
            AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
            ComponentName cn = new ComponentName(getApplicationContext(), widget.class);
            manager.updateAppWidget(cn, rv);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            timer = null;
        }
    
    }

    6,

    添加和删除天气Widget:

    7,

    8,

  • 相关阅读:
    常用Linux命令
    KDevolop使用小技巧
    微软在5/10/2006发布新版的LINQ Preview (May 2006).msi 无为而为
    盼望已久的Office Live Beta 已经发布,大家可以去尝尝鲜 无为而为
    需求工程:TFS MSF模版中UI Flow model的应用 无为而为
    Visual Studio 2005 Team Foundation Server 试用版及中文说明文件下载,中文版可能在2006年5月15日发布 无为而为
    让我们努力从“不可救药的乐观主义者”华尔街知名投资人约翰。多尔那里学点东西(永远放弃尝试改变这个世界) 无为而为
    Visual Studio 2005 开发Office(Word/Excel)项目的若干资源和示例 无为而为
    IT人看《国富论》系列:第一篇之第十章:论工资与利润随劳动与资本用途的不同而不同,分析分析IT界薪水起伏的原因 无为而为
    非正常状态,彻底删除Exchange服务器 无为而为
  • 原文地址:https://www.cnblogs.com/yang101/p/11595790.html
Copyright © 2011-2022 走看看