(原创 开源)AppWidge的使用—桌面便利贴

Android平台的一大特点就是支持桌面插件——AppWidget。html

且不说,AppWidget是否会影响系统的流畅性,AppWidget确实是知足了用户个性化和快捷操做的须要。android

常见的AppWidget有四种基本形态:git

信息型:程序员

 

想当年HTC的翻页时钟就大红大紫过好长一阵子。github

 

控制型:算法

 

 

集合型:数据库

 

 

混合型:app

 

其实大部分的AppWidget都是属于这个类型的,即可以显示信息,又提供控制功能。ide

 

总结一下:布局

AppWidget提供了一个快速的途径去得到咱们想要的信息

提供一个快捷的手段去控制应用

一些设计良好的AppWidget确实能够为手机增色很多

 

本人有必定的“应用洁癖”,通常只用那些没有太多乱七八糟功能的应用。一直在找一款简单实用的便签应用。对于我我的而言,语音记录、云同步之类的功能都是比较鸡肋的。我以前用过两款:OPPO的NearMe笔记和小米便签。都还能够,至少,没有太多没用的功能。

其中小米便签仍是开源的:https://github.com/MiCode/Notes(开源什么的最有爱了~~~)能够学到很多的东西。

 

当程序员有一个好处,就是当用其余应用都不爽的时候,能够本身开发一个~~~

我本身的需求以下:

尽量的轻量:不经常使用的功能一概不要。

界面要好看一点:毕竟,程序员也是要装X的~~~

 

最终的效果是这样的:

 

点击能够进入编辑:

 

 

点击左上角能够换肤,点击那个“T”能够进行字体调节:

 

调节过程还能够实时预览。

好了,下面不废话了,进入开发时间!!!

官方文档地址:http://developer.android.com/intl/zh-cn/guide/topics/appwidgets/index.html

 

一个AppWidget须要用到下面的东东:

AppWidgetProviderInfo:这货是描述整个AppWidget的元信息的。好比更新的频率,初始大小等。它被放在/res/xml/目录下,是一个xml文件。好比个人这个应用的代码以下:

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:configure="com.stickynote.EditActivity" android:initialLayout="@layout/widget_note" android:minHeight="40dp" android:minWidth="250dp" android:previewImage="@drawable/icon_app" android:updatePeriodMillis="0" />

它的一些属性解释以下:

configure:当一个AppWidget第一次生成时能够启动一个Activity来配置它,该属性是可选的。

initialLayout:AppWidget的布局文件。

minHeight和minWidth:这两个参数比较复杂,最好参看官方文档,由于不一样版本下仍是不一样的,好比从4.1开始还支持AppWidget大小的改变这些。

previewImage:就是AppWidget的预览图,不设置的话就是App的图标。

UpdatePeriodMillis:更新频率,这个也须要特别说明一下,在新版本的系统中(貌似是4.0)开始,更新频率是不能设置太小的,由于要考虑到耗电问题。因此,若是须要作到“实时”更新的话,就须要经过其余手段了。

其余属性看文档吧~~~

 

AppWidgetProvider:这家伙封装了BroadcastReceiver,并重写了onReceive方法。因此通常状况下,咱们不须要再去重写onReceive方法了。而是按须要去重写如下的几个方法:

onEnabled:当这个App的第一个AppWidget建立时调用,也就是说添加第十个AppWidget时,是不会调用的。

onUpdate:当AppWidget更新时调用,好比到了更新的时间。注意,好比当手机从新启动时,这个方法也会被调用的。

onDeleted:当AppWidget被删除时调用。

onDisabled:当最后一个AppWidget被删除时调用。与onEnabled对应。

 

View layout:AppWidget的布局文件,与Activity的布局文件相似。但不是全部的控件、容器均可以用于AppWidget的。具体支持的控件请看文档:http://developer.android.com/intl/zh-cn/guide/topics/appwidgets/index.html#CreatingLayout

 

其实上面的东西都是官方文档的“中文简化版”,阅读英文文档仍是至关重要的。

 

项目的文件结构:

 

其实本人不是怎么喜欢贴代码,由于我本身的看博客的习惯就不喜欢看代码(算法博文除外),因此我通常只写原理,代码的话本身下载运行一下应该我以为更好~~~

 

AppWidgetProvider的配置:

AppWidgetProvider的本质仍是一个广播接收器,因此在AndroidManifest.xml中仍是使用一个receiver标签来配置:

<receiver android:name="com.stickynote.widget.NoteWidgetProvider" >

         <!-- 固定写法 -->

         <intent-filter>

                   <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

         </intent-filter>

         <!-- name也是固定的,resource就是那个AppWidget的配置文件 -->

         <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_note" />

</receiver>

添加AppWidget进弹出编辑Activity:

这个过程分为二步,第一:在AppWidgetProviderInfo中添加

android:configure="com.stickynote.EditActivity"

注意,这个Activity必定要带包名的!

第二:在Activity的配置中,必定要添加一个intent-filter:

<activity android:name="com.stickynote.EditActivity" android:theme="@android:style/Theme.Holo.NoActionBar" >

         <intent-filter>

                   <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />

         </intent-filter>

</activity>

更新(设置)AppWidget:

更新AppWidget是经过AppWidgetManager的updateAppWidget(int appWidgetId, RemoteViews views)这个方法来实现的。

其中,RemoteViews就是AppWidget的视图,咱们要对其中的“子控件”进行设置,只能经过它提供的setXxx方法实现,有些方法是能够直接使用的,好比其中的TextView:

 

若是想对其中的布局设置背景,这时就只有经过好比setInt这个方法来“曲线救国”了:

views.setInt(R.id.rl_widget_note, "setBackgroundResource", bgRes); // 设置背景

同理,设置字体大小能够经过以下方法实现:

views.setFloat(R.id.tv_widget_note_content, "setTextSize", note.textSize); // 设置字体大小

注意:在AppWidget启动时调用的Activity更新以后,必定要setResult!不然没有结果。

Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, note.appWidgetId); setResult(RESULT_OK, resultValue); finish();

AppWidget的东西差很少了,剩下的东西就是数据库啊,还有一些界面之类的东西,应该说,东西不大,但该有的都有了,并且我的以为把要把整个应用的代码用合理优雅的方法来实现,其实比单纯的学会调用API理重要。

 

本人菜鸟一个,欢迎各位的批评指正。

若是有疑问,请直接留言或经过475500230@qq.com这个邮箱与我交流。

 

图片资源大部分来自小米便签,在此表示感谢。

我的练习做品,欢迎转载!但请注意原做者与出处。

 

源码下载:http://pan.baidu.com/share/link?shareid=1065236481&uk=1812042723

安装包下载:http://pan.baidu.com/share/link?shareid=1152653812&uk=1812042723

相关文章
相关标签/搜索