之前看别人说用android studio ,而我还是用着ecilipse不以为然,试了一次,感觉还不如ecilipse好用,后来还是一直用的ecilipse,知道最近用起了android studio才发现真的很强大,支持各种功能,扯远了,在ecilipse中制作桌面插件,又要配置这个又要配置那个,而在android studio中真的是一键搞定,没有比这个更好的了。下面来看看android studio生成的一些关于AppWidgets的一些文件。
我们来按照一般的设计流程看下代码:
1.新建AppWidgetProvider继承类:MyAppWidget
public class MyAppWidget extends AppWidgetProvider { //第一次加载时调用,是个静态函数,很明显 static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { CharSequence widgetText = context.getString(R.string.appwidget_text); // 加载布局文件生成RemoteViews,即要显示的View RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget); views.setTextViewText(R.id.appwidget_text, widgetText); // Instruct the widget manager to update the widget appWidgetManager.updateAppWidget(appWidgetId, views); } //桌面插件内容更新函数,生命周期内,每隔固定时间更新一次,调用一次 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // There may be multiple widgets active, so update all of them for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } } @Override public void onEnabled(Context context) { // Enter relevant functionality for when the first widget is created } @Override public void onDisabled(Context context) { // Enter relevant functionality for when the last widget is disabled } }2.需要给 MyAppWidget弄个布局用来显示:my_app_widget,这个就不用说多少了
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent" android:background="#09C" android:padding="@dimen/widget_margin"> <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:layout_margin="8dp" android:background="#09C" android:contentDescription="@string/appwidget_text" android:text="@string/appwidget_text" android:textColor="#ffffff" android:textSize="24sp" android:textStyle="bold|italic" /> </RelativeLayout>
3.搞个Widget配置文件,描述widget的一些参数:my_app_widget_info
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialKeyguardLayout="@layout/my_app_widget" //锁屏插件布局位置 android:initialLayout="@layout/my_app_widget" //加载布局位置 android:minHeight="40dp" android:minWidth="250dp" android:previewImage="@drawable/example_appwidget_preview" android:resizeMode="horizontal|vertical" android:updatePeriodMillis="86400000" //更新时间间隔 android:widgetCategory="home_screen|keyguard"></appwidget-provider> //插件模式:桌面和锁屏
4.最后一步也是很重要的一步就是配置文件的设置:AndroidManifest.xml
只加了以下代码:
<receiver android:name=".MyAppWidget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_app_widget_info" /> </receiver>可以看出,widget其实就是用了广播组件,底层功能还要看底层源代码学习,加油~