App Widget
把所有的控件都叫做widget,
1、什么是APP Widget
2、创建一个APP Widget
桌面上的控件。 快捷方式,文件夹,壁纸
和App Widget 相关的基本概念
1、AppWidgetProviderInfo对象:为App Widget提供元数据(描述数据的数据,关系型数据库的表结构也是元数据),包括布局,更新频率等等数据。这个对象被定义在XML文件中。
2、AppWidgetProvider:定义了App Widget的基本生命周期。
1、创建第一个App Widget的步骤
下面来看看编写步骤 :
1.为AppWidget提供一个元文件布局AppWidgetProviderInfo,用来显示widget的界面,
2.创建一个WidgetProvider继承自AppWidgetProvider;
3.为 WidgetProvider创建一个布局文件也可以直接用main.xml;
代码部分:
1)提供 AppWidgetProviderInfo的布局文件 res/xml/example_appwidget_info.xml
注意:这个布局文件放在的Layout里面的,是放在res/xml,自己创建XML。
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/example_appwidget_preview" android:initialLayout="@layout/new_app_widget" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen" android:initialKeyguardLayout="@layout/new_app_widget"> </appwidget-provider>
android:updatePeriodMillis 更新时间,以毫秒为单位。
android:initialKeyguardLayout 初始化的布局,引用一个布局文件,在Layout里面的。
2)为App Widget指定样式和布局:
定义一个新的布局文件example_appwidget.xml.这里只是一个简单的TextView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/widget_margin" android:background="#09C"> <TextView android:id="@+id/appwidget_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/appwidget_text" android:textColor="#ffffff" android:textSize="24sp" android:textStyle="bold|italic" android:layout_margin="8dp" android:contentDescription="@string/appwidget_text" android:background="#09C" /> </RelativeLayout>
3)实现AppWidgetProvider这个类
/** * Implementation of App Widget functionality. * 这就是个请求分发嘛。 */ public class NewAppWidget extends AppWidgetProvider { //在到达指定的更新时间后或者是当用户像桌面添加App Widget时,会调用该方法。 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // There may be multiple widgets active, so update all of them final int N = appWidgetIds.length; for (int i = 0; i < N; i++) { updateAppWidget(context, appWidgetManager, appWidgetIds[i]); } } //当第一个App Widget的实力第一次被创建时,会调用该方法。 @Override public void onEnabled(Context context) { // Enter relevant functionality for when the first widget is created } //当最后一个App Widget实例被删除时候,会调用该方法。 @Override public void onDisabled(Context context) { // Enter relevant functionality for when the last widget is disabled } //当App widgt 被删除时,会调用该方法。 @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); } //接受广播事件。 @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); } 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.example_appwidget); views.setTextViewText(R.id.appwidget_text, widgetText); // Instruct the widget manager to update the widget appWidgetManager.updateAppWidget(appWidgetId, views); } }
4、注意这就是一个广播机制。在Mainifest.xml里面声明。
<receiver android:name=".NewAppWidget" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" /> </receiver>
时间: 2024-11-13 09:43:12