使用 Android Studio 开发 widget 安卓桌面插件
•What
AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序;
这么说可能有点抽象,看图:
像这种,桌面上的天气、时钟、搜索框等等,都属于 APP Widget;
一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。
AppWidget 是Android 系统应用开发层面的一部分,有着特殊用途,使用得当的化,的确会为app 增色不少;
它的工作原理是把一个进程的控件嵌入到另外一个进程的窗口里的一种方法。
长按桌面空白处,会出现一个 AppWidget 的文件夹;
在里面找到相应的 AppWidget ,长按拖出,即可将 AppWidget 添加到桌面;
•How首先,新建一个项目,我命名为 TestAppWidget:
将项目结构模式改为 Project 模式:
然后,右击 app, New->Widget->App Widget :
来到如下界面:
Class Name : 小控件的名字,这里我选择默认的resizeMode : 小控件可以被拉伸的方向horizontal : 水平拉伸vertical : 数值拉伸Both : 两者都none : 无Minimum Width : 小控件占用的宽度单元格Minimun Height : 小控件占用的高度单元格Width,Height 暂且都选为默认值,后期觉得不合适可以更改;
一切准备就绪,点击 FINISH 就创建了一个 Android Studio 默认的 App Widget;
让我们来看看这个默认的 Widget 长啥样,首先将这个 Widget 放置到桌面:
上图红框框中的便是默认的 Widget 的样式;
•通过代码深入了解WidgetAppWidget 是通过 BroadcastReceiver 的形式进行控制的;
开发 AppWidget 的主要类为 AppWidgetProvider,该类继承自 BroadcastReceiver。
为了实现桌面小部件,开发者只要开发一个继承自 AppWidgetProvider 的子类,并重写它的 onUpdate() 方法即可。
重写该方法,一般来说可按如下几个步骤进行:
1、创建一个 RemoteViews 对象,这个对象加载时指定了桌面小部件的界面布局文件。
2、设置 RemoteViews 创建时加载的布局文件中各个元素的属性。
3、创建一个 ComponentName 对象
4、调用 AppWidgetManager 更新桌面小部件。
在 App/src/main/java 目录下,有一个自动生成的 NewAppWidget.java 文件:
NewAppWidget.java /** * Implementation of App Widget functionality. */public class NewAppWidget extends AppWidgetProvider { 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.new_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 }}该类继承自 AppWidgetProvider ,Android Studio 默认帮我们重写 onUpdate() 方法遍历 appWidgetId,并调用了 updateAppWidget() 方法。
再看 updateAppWidget() 方法,很简单,只有四行:
第一行:CharSequence widgetText = context.getString(R.string.appwidget_text);