Android Widget之桌面組件App Widget案例
Android Widget之桌面組件App Widget案例是本文要介紹的內(nèi)容,主要Android Widget組件的學(xué)習(xí)教程,具體內(nèi)容來(lái)看本文詳解。
模擬一個(gè)案例:把AppWidget添加到桌面后,點(diǎn)擊AppWidget后AppWidget文本會(huì)輪回改變
main.xml布局文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:id="@+id/tv"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="程序入口"
- android:textSize="50dip"/>
- </LinearLayout>
- res/xml/my_appwidget.xml布局文件
- <?xml version="1.0" encoding="utf-8"?>
- <appwidget-provider
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="120dp"
- android:minHeight="60dp"
- android:updatePeriodMillis="1000"
- android:initialLayout="@layout/main">
- </appwidget-provider>
清單文件
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.ljq.activity" android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon"
- android:label="@string/app_name">
- <receiver android:name=".TestActivity">
- <meta-data android:name="android.appwidget.provider"
- android:resource="@xml/my_appwidget">
- </meta-data>
- <intent-filter>
- <action android:name="COM.LJQ.ACTION.WIDGET.CLICK"></action>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
- </intent-filter>
- </receiver>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- </manifest>
變量類(lèi)UtilTool:用來(lái)控件文本改變
- package com.ljq.activity;
- public class UtilTool {
- public static boolean isChange=true;
- }
- TestActivity類(lèi),繼承自AppWidgetProvider
- package com.ljq.activity;
- import android.app.PendingIntent;
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProvider;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.RemoteViews;
- public class TestActivity extends AppWidgetProvider {
- // 自定義一個(gè)Action名
- private static final String ACTION_CLICK_NAME = "COM.LJQ.ACTION.WIDGET.CLICK";
- private RemoteViews rv;
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- System.out.println("onUpdate");
- //獲取R.layout.main布局,通過(guò)類(lèi)RemoteViews對(duì)布局R.layout.main里的控件進(jìn)行操作
- /*rv = new RemoteViews(context.getPackageName(), R.layout.main);
- Intent intentClick = new Intent(ACTION_CLICK_NAME);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
- rv.setOnClickPendingIntent(R.id.tv, pendingIntent);
- ComponentName cmp = new ComponentName(context, TestActivity.class);
- AppWidgetManager myAppWidgetManager = AppWidgetManager.getInstance(context);
- myAppWidgetManager.updateAppWidget(cmp, rv);*/
- final int N = appWidgetIds.length;
- for (int i = 0; i < N; i++) {
- int appWidgetId = appWidgetIds[i];
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
- //AppWidget生命周期: 每接收一次,廣播執(zhí)行一次為一個(gè)生命周期結(jié)束。
- //也就是說(shuō)在重寫(xiě)AppWidgetProvider類(lèi)里面聲明全局變量做狀態(tài)判斷,
- //每次狀態(tài)改變AppWidgetProvider再接收第二次廣播時(shí)即為你重新初始化也就是說(shuō)重新實(shí)例化了一次AppWidgetProvider。
- //今天我因?yàn)樵诶锩娣帕艘粋€(gè)boolean值初始化為true,觀察調(diào)試看到每次進(jìn)入都為T(mén)RUE故你在設(shè)置桌面組件時(shí),
- //全局變量把它聲明在另外一個(gè)實(shí)體類(lèi)用來(lái)判斷是沒(méi)問(wèn)題的,切忌放在本類(lèi)。
- @Override
- public void onReceive(Context context, Intent intent) {
- System.out.println("onReceive");
- if (rv == null) {
- rv = new RemoteViews(context.getPackageName(), R.layout.main);
- }
- if (intent.getAction().equals(ACTION_CLICK_NAME)) {
- if (UtilTool.isChange) {
- rv.setTextViewText(R.id.tv, "abc");
- } else {
- rv.setTextViewText(R.id.tv, "123");
- }
- UtilTool.isChange = !UtilTool.isChange;
- AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);
- int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(context, TestActivity.class));
- appWidgetManger.updateAppWidget(appIds, rv);
- }else{
- super.onReceive(context, intent);
- }
- }
- private void updateAppWidget(Context context,
- AppWidgetManager appWidgeManger, int appWidgetId) {
- rv = new RemoteViews(context.getPackageName(), R.layout.main);
- Intent intentClick = new Intent();
- intentClick.setAction(ACTION_CLICK_NAME);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
- rv.setOnClickPendingIntent(R.id.tv, pendingIntent);
- appWidgeManger.updateAppWidget(appWidgetId, rv);
- }
- }
小結(jié):Android Widget之桌面組件App Widget案例的內(nèi)容介紹完了,希望通過(guò)Android Widget組件的應(yīng)用內(nèi)容的學(xué)習(xí)能對(duì)你有所幫助。