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" />

你可能感兴趣的:(widget的使用)