widget的使用

利用widget實現一個時鐘功能小插件

一般來說 widget 程序由以下部分組成:

a. AppWidgetProvider 的實現

b. widget外觀布局定義文件

c. widget 參數配置文件

d.服務的實現

e.androidManifest.xml文件配置

a.寫一個類繼承AppWidgetProvider

public class TonyAppWidgetProvider extends AppWidgetProvider {

private final static String TAG = "TonyAppWidgetProvider";

/**

* 1:在xml文件中android:updatePeriodMillis="86400000"只能精確到分 ?不滿足我們的要

*:2:當我們用戶每添加一個appwidget就會調用一次

*/

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

Log.e(TAG, "onUpdate");

super.onUpdate(context, appWidgetManager, appWidgetIds);

}

/**

* 在沒有 appwidget ?當用戶初次添加appwidget的時候調用

* 1:做一些初始化的工作

* 2:打開數據庫

* 3:啟動服務

*

*/

public void onEnabled(Context context) {

super.onEnabled(context);

Log.e(TAG, "onEnabled");

Intent intent = new Intent(context, TonyAppWidgetService.class);

context.startService(intent);

}

/**

* 用戶每刪除一個appwidget就會調用一次

*/

@Override

public void onDeleted(Context context, int[] appWidgetIds) {

Log.e(TAG, "onDeleted");

super.onDeleted(context, appWidgetIds);

}

/**

* 最后一個appwidget刪除時調用

*/

@Override

public void onDisabled(Context context) {

super.onDisabled(context);

Log.e(TAG, "onDisabled");

}

}

=================================================================

b.widget外觀布局定義文件,添加一個布局文件,文件取名為:tony_appwidget


android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/tv_time"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@android:color/holo_red_light"

android:text="TextView" />

=========================================================================

c. widget 參數配置文件

建一個名為xml的文件夾,并且在此文件夾建一個.xml文件取名為tony_appwidget_info


android:minWidth="294dp"

android:minHeight="72dp"

android:previewImage="@mipmap/ic_launcher"

android:initialLayout="@layout/tony_appwidget"

android:resizeMode="horizontal|vertical">


android:minWidth="294dp" ? appwidget最小的寬度

android:minHeight="72dp" ? appwidget最小的高度

android:updatePeriodMillis="86400000" ?appwidget 更新的時間 不能精確到秒 ?一般最小的精度是分

問題:怎么控制更新的時間 ?,代碼中控制

android:previewImage="@drawable/ic_launcher" ?預覽圖片

android:initialLayout="@layout/example_appwidget" ?當我們添加一個appwidget時的布局

當我們添加一個appwidget自動啟動的Activity的名字

android:configure="com.example.android.ExampleAppWidgetConfigure"

重置appwidget的大小時的模式:表示可以水平 垂直拉伸

android:resizeMode="horizontal|vertical">

-->

======================================================================================================

d.服務的實現

創建一個文件TonyAppWidgetService繼承Service

public class TonyAppWidgetService extends Service {

private AppWidgetManager am;

//方式1:Handler + Runnable

private Handler handler=new Handler();

private Runnable runnable=new Runnable() {

@Override

public void run() {

//獲取系統的時間,并更新appwidget視圖

//RemoteView :不是當前應用的視圖 ?屬于其他的應用程序

RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.tony_appwidget);

//獲取當前時間

String time=new Date().toLocaleString();

//設置顯示

remoteViews.setTextViewText(R.id.tv_time,time);

//隨機改變字體的顏色

Random rd = new Random();

remoteViews.setTextColor(R.id.tv_time, Color.rgb(255, 255, rd.nextInt(256)));

ComponentName componentName=new ComponentName(getApplicationContext(),TonyAppWidgetProvider.class);

am.updateAppWidget(componentName,remoteViews);

//點擊 ?發送一個意圖 ?PendingIntent ?延遲意圖

Intent intent = new Intent(getApplicationContext(), MyNote.class);

PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 100, intent, 0);

remoteViews.setOnClickPendingIntent(R.id.tv_time, pendingIntent);

handler.postDelayed(runnable,1000);

}

};

public IBinder onBind(Intent intent) {

return null;

}

public int onStartCommand(Intent intent, int flags, int startId) {

am = AppWidgetManager.getInstance(this);

handler.post(runnable);

//啟動定時器

return super.onStartCommand(intent, flags, startId);

}

}

=======================================================================================================

e.配置androidManifest.xml文件



android:name="android.appwidget.provider"

android:resource="@xml/tony_appwidget_info" />

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容