布局layout : widget_home.xml
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/widget_bg_fillet" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> android:id="@+id/widget_time" android:layout_width="match_parent" android:layout_height="65dp" android:layout_alignParentTop="true" android:padding="5dp"> android:id="@+id/widget_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:layout_marginLeft="15dp" android:textColor="#ff4a4a4a" android:textSize="36sp" android:text="4月5号" /> android:id="@+id/widget_week" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toRightOf="@+id/widget_date" android:text="周三下午" android:textColor="#ff4a4a4a" android:textSize="15sp" android:layout_marginLeft="10dp" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_marginRight="15dp" android:orientation="vertical" android:gravity="center"> android:id="@+id/weather_image" android:layout_width="36dp" android:layout_height="36dp" /> android:id="@+id/weather_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="雷阵雨" android:textColor="#ff4a4a4a" android:textSize="12sp"/> android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="10dp" android:paddingRight="10dp" android:layout_marginBottom="15dp"> android:id="@+id/company_rank" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="10dp" android:background="@drawable/widget_item_bg_fillet"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/company_rank_number" android:layout_marginBottom="10dp" android:layout_centerHorizontal="true" android:text="通话时长" android:textSize="12sp" android:textColor="#9B9B9B"/> android:id="@+id/company_rank_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="3" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/company_rank_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/company_rank_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="公司排名" android:textColor="#606266" android:textSize="14sp" /> android:id="@+id/branch_rank" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="10dp" android:background="@drawable/widget_item_bg_fillet"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/branch_rank_number" android:layout_marginBottom="10dp" android:layout_centerHorizontal="true" android:text="通话时长" android:textSize="12sp" android:textColor="#9B9B9B"/> android:id="@+id/branch_rank_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="1" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/branch_rank_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/branch_rank_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="部门排名" android:textColor="#606266" /> android:id="@+id/call_customer" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:background="@drawable/widget_item_bg_fillet"> android:id="@+id/call_customer_path" android:layout_width="12dp" android:layout_height="7dp" android:layout_alignParentEnd="true" android:layout_alignTop="@+id/call_customer_number" android:layout_marginEnd="23dp" android:src="@drawable/down" /> android:id="@+id/call_customer_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="289" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/call_customer_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/call_customer_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="拨打客户数" android:textColor="#606266" /> android:id="@+id/answer_customer" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/widget_item_bg_fillet"> android:id="@+id/answer_customer_path" android:layout_width="12dp" android:layout_height="7dp" android:layout_alignParentEnd="true" android:layout_alignTop="@+id/answer_customer_number" android:layout_marginEnd="23dp" android:src="@drawable/up" /> android:id="@+id/answer_customer_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="175" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/answer_customer_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/answer_customer_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="接通客户数" android:textColor="#606266" /> android:id="@+id/intention_customer" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:layout_marginLeft="10dp" android:background="@drawable/widget_item_bg_fillet"> android:id="@+id/intention_customer_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="37" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/intention_customer_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/intention_customer_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="有意向客户" android:textColor="#606266" /> android:id="@+id/exchange_customer" android:layout_width="126dp" android:layout_height="112dp" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_marginRight="10dp" android:background="@drawable/widget_item_bg_fillet"> android:id="@+id/exchange_customer_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="54" android:textColor="#4A4A4A" android:textSize="32sp" /> android:id="@+id/exchange_customer_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/exchange_customer_number" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="待沟通客户" android:textColor="#606266" />
布局xml:desktop_widget.xml
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="240dp" android:minHeight="500dp" android:updatePeriodMillis="86400000" android:previewImage="@mipmap/ic_launcher" android:initialLayout="@layout/widget_home" android:initialKeyguardLayout="@layout/widget_home" android:widgetCategory="home_screen|keyguard">
AndroidManifest.xml 配置:
android:name=".widget.DesktopWidgetProvider" >
android:name="android.appwidget.action.APPWIDGET_UPDATE" />
android:name="com.worken.micro.widget.UPDATE_ALL" />
android:name="com.worken.micro.widget.WEATHER" />
android:name="android.appwidget.provider"
android:resource="@xml/desktop_widget" />
小窗口DesktopWidgetProvider.class代码:
public class DesktopWidgetProvider extends AppWidgetProvider { // 每次删除该类型的窗口小部件(AppWidget)时都会触发 ,同时发送ACTION_APPWIDGET_DELETED广播, // 该广播可被onReceive()方法接受到. @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); } // 最后删除该类型的窗口小部件(AppWidget)时触发 @Override public void onDisabled(Context context) { super.onDisabled(context); Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class); context.startService(startUpdateIntent); } //第一次添加该类型的窗口小部件窗口小部件(AppWidget)时触发 @Override public void onEnabled(Context context) { super.onEnabled(context); Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class); context.startService(startUpdateIntent); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class); context.startService(startUpdateIntent); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); RemoteViews remoteViews = UpdateWidgetService.updateWidgetView(context); int N = appWidgetIds.length; for(int i = 0 ; i < N ; i++){ appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); } } }
小窗口数据刷新UpdateWidgetService.class代码:
public class UpdateWidgetService extends Service { private Timer timer; private TimerTask task; private static RemoteViews remoteViews = null ; public UpdateWidgetService() { } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onCreate() { timer = new Timer(); task = new TimerTask() { @Override public void run() { ComponentName componentName = new ComponentName(UpdateWidgetService.this, DesktopWidgetProvider.class); RemoteViews remoteViews = updateWidgetView(getApplicationContext()); //由AppWidgetManager处理Wiget. AppWidgetManager awm = AppWidgetManager.getInstance(getApplicationContext()); awm.updateAppWidget(componentName, remoteViews); } }; timer.schedule(task, 0, 30 * 60 * 1000); super.onCreate(); } public static RemoteViews updateWidgetView(Context context){ NowWeather.showWeather(); obtainRankData(context, null); if(remoteViews == null) { //初始化remoteView对象 remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_home); } //设置相应属性 setTimeAttributes(remoteViews); setWeather(remoteViews); setRankData(remoteViews); return remoteViews ; } @Override public void onDestroy() { super.onDestroy(); timer.cancel(); task.cancel(); timer = null; task = null; }
期待下次更新...