首页 > 代码库 > android中常用的小控件------Widgets的使用
android中常用的小控件------Widgets的使用
好久没有写博客了,都不知博客怎么写了,最近突然想写博客,以帮助更多的人,却又不知道写什么好呢?
好吧 我承认我有点懒惰了,可是程序猿是不应该懒惰的哦,俺要做个好孩子。
好了言归正传,开始介绍下今天的主要内容吧!
Widgets一个桌面的小控件 个人认为是很常用的,不知道大神们是不是这么觉得的呢?比如说你开发的一款音乐播放器的软件,可把基本的上一曲和下一曲、暂停的几个功能放在这个小控件里面将它显示在桌面上来,这样就很方便啦,你想要下一曲、上一曲、暂停播放的时候,就不用再打开播放器了,而是直接通过这个小控件就可以实现了,是不是很实用呢?好了下面就来介绍下这款精美的小控件是怎么使用吧!
首先我们来看一下官方的文档:
在官方文档的主页
如果大家想知道有关Widgets的详细信息的,可以到官方文档看一看,这里就不做详细的介绍啦,下面开始怎么写,才是最重要的。
第一步:写一个类继承AppWidgetProvider
public class MyWidgets extends AppWidgetProvider { }
那大家又有疑问了AppWidgetProvider是什么啊?的确 我刚开始的时候也有这种疑问,下面将来说明;
我们来看一下AppWidgetProvider内的源码
public class AppWidgetProvider extends BroadcastReceiver { /** * Constructor to initialize AppWidgetProvider. */ public AppWidgetProvider() { }
此处省略一部分源码 我们看关键的部分
大家看到了吗
AppWidgetProvider 是继承BroadcastReceiver的,而<pre name="code" class="java">BroadcastReceiver又是一个广播接收者,所以大家又想到了什么呢?当然是清单文件AndroidManifest.xml啊
android中的四大组件都需要在清单文件AndroidManifest.xml中配置的啦 接下来的第二步就是配置清单文件啦
第二步:在清单文件中AndroidManifest.xml中配置继承AppWidgetProvider的类
那具体怎么配置呢?android官方文档已经给我们示例代码了,我们来看一看
<receiver android:name="ExampleAppWidgetProvider" ><!-- 继承AppWidgetProvider类的完成的包名+类名--> <intent-filter><!--意图过滤器,告诉你这个类干什么--> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><!--意图过滤器的动作:简单的说就是让你这个类执行什么指令--> </intent-filter> <!--元数据 1.名字 2.引用的资源 --> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" /> </receiver>
好了到这里我们的清单文件也配置好了,需要注意的是:
是在清单文件中application节点下配置,因为是四大组件 所有需要在统一级别配置
上面的配置中包名+类名的位置可根据自己的包名和类名加以修改,其次是引用资源的时候我们要说一下了
回到我们的程序的结构的res文件夹下面新建一个xml文件,并在文件夹内新建一个xml文件 这里就用官方的文件名,读者可自己修改xml/example_appwidget_info.xml
可是呢?有一个问题来了,那这个xml文件具体怎么写呢?不用担心,android官方文档里面早已有“美女”在等着我们了,等着我们去猎取呢? 好吧 我想歪了 不过还得去看看 是吧 嘿嘿 走起。。。。。。。。
首先我们都应该知道既然是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/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen|keyguard" android:initialKeyguardLayout="@layout/example_keyguard"> </appwidget-provider>
好了,既然“美女”我们已经找到了,那我们就来好好研究下吧。
android:minWidth="40dp" 桌面控件默认的宽度 android:minHeight="40dp" 桌面控件默认的高度 <pre name="code" class="html"><span style="font-size:14px;"></span><pre name="code" class="html">android:updatePeriodMillis="86400000" 最短的更新时间 这里是毫秒值 默认是30分钟
android:previewImage="@drawable/preview" 预览的图片 如果不指定图片 就会默认使用应用程序的图片 <span style="font-size:14px;"></span><pre name="code" class="html">android:initialLayout="@layout/example_appwidget"桌面控件的布局 就是我们要显示的布局 <span style="font-size:14px;"></span><pre name="code" class="html">android:configure="com.example.android.ExampleAppWidgetConfigure" 如果你的应用程序没有界面就需要指定相应的参数 一般有界面的程序不用管哦 <span style="font-size:14px;"></span><pre name="code" class="html">android:resizeMode="horizontal|vertical" 压缩的方式 默认水平压缩和垂直压缩
android:widgetCategory="home_screen|keyguard"<span class="high-light-bg">声明你的应用是否控件可以显示在屏幕上</span><span>.</span> <p class="ordinary-output target-output"><span class="high-light-bg"></span><pre name="code" class="html">android:initialKeyguardLayout="@layout/example_keyguard" 锁定屏幕时的组件布局 好了 到这里我们的资源文件也写完了, 需要提醒大家的是 在开发中 我们并不需要全部的写上 只需要根据我们需要写相应的属性即可到这一步 我们基本的桌面小控件就已经搭建好了,如果大家还有更多的需求,请参照android提供的官方文档查看。
这里给大家提供一个简单demo
第一步:写一个类继承AppWidgetProvider
public class MyWidgets extends AppWidgetProvider { private static final String TAG = "MyWidgets"; @Override public void onDisabled(Context context) { super.onDisabled(context); Log.i(TAG, "onDisabled"); //桌面没有控件 就停止服务 Intent service = new Intent(context, WidgetsUpdateService.class); context.stopService(service); } @Override public void onEnabled(Context context) { super.onEnabled(context); Log.i(TAG, "onEnabled"); //桌面有控件 开启服务 更新 Intent service = new Intent(context, WidgetsUpdateService.class); context.startService(service); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Log.i(TAG, "onUpdate"); //开服务 Intent service = new Intent(context, WidgetsUpdateService.class); context.startService(service); }
第二步:在清单文件中配置
example_appwidget_info
<receiver android:name="com.androidit.receiver.MyWidgets" > <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>
在res资源文件夹下创建一个xml文件夹,新建一个xml文件(请注意 先创建xml文件夹在创建example_appwidget_info文件)
<pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"><span class="high-light-bg">example_appwidget_info.xml </span><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="0" android:resizeMode="horizontal|vertical" android:initialLayout="@layout/process_widget"> </appwidget-provider>
布局文件这里就不附上了,给大家看个最终的图吧,至于什么样的布局 大家自己写吧
如果你对本博客感兴趣,请关注哦,不定期更新android方面的文章