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

news/2024/2/28 0:23:42

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

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

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

信息型:

 

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

 

控制型:

 

 

集合型:

 

 

混合型:

 

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

 

总结一下:

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-dataandroid:name="android.appwidget.provider"android:resource="@xml/widget_note" /></receiver>

添加AppWidget进弹出编辑Activity:

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

android:configure="com.stickynote.EditActivity"

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

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

<activityandroid: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

转载于:https://www.cnblogs.com/yjiyjige/p/3333875.html


http://www.ppmy.cn/news/684451.html

相关文章

win11怎么在桌面上添加便签

Windows11上有自带的便签&#xff0c;功能和备忘录类似。用户可以在便签上输入文字内容和粘贴图片。用户可以在便签上记录自己认为重要的信息&#xff0c;不用把纸质便利贴贴得哪里都是。如果想使用系统自带的便签&#xff0c;可以在开始菜单栏的搜索框里&#xff0c;搜索便签并…

java pdf添加便利贴_win10系统便利贴添加到桌面的操作方法

很多小伙伴都遇到过对win10系统便利贴添加到桌面进行设置的困惑吧&#xff0c;一些朋友看过网上对win10系统便利贴添加到桌面设置的零散处理方法&#xff0c;并没有完完全全明白win10系统便利贴添加到桌面的操作方法非常简单&#xff0c;只需要1.首先我们在开始菜单中找到便利贴…

计算机桌面怎么添加便签,如何在电脑桌面上添加便签 这些知识你不一定知道...

我们平时生活工作的时候&#xff0c;忙起来的时候有很多事情都记不住&#xff0c;这时候便签的作用就很大了&#xff0c;那我们下面就来看看如何在电脑桌面上添加便签。 操作方法 01 第一种方法&#xff1a; 首先我们点击电脑的“开始”-“所有应用”&#xff0c;在Windows附件…

Win11桌面贴纸功能怎么开启?

在最新的Win11系统中&#xff0c;微软为我们带来了一个隐藏功能——桌面贴纸。而不少用户并不知道怎么使用&#xff0c;其实这个功能默认是关闭的&#xff0c;需要开启的话下面就和小编一起来看看怎么操作吧&#xff01; 更多重装系统教程尽在小白系统重装官网 Windows 键 R 键…

ubuntu 桌面便利贴_使用便利贴将便利贴优点添加到您的桌面

ubuntu 桌面便利贴 Are you looking for a customizable sticky notes program for your desktop that can be fixed to blend with your theme? See how Stickies makes a nice addition to any Windows system. 您是否正在为桌面寻找可自定义的便笺程序&#xff0c;该程序可…

Spring Data JPA中CrudRepository与JpaRepository的不同

使用Spring Data JPA CrudRepository 和JpaRepository 的好处&#xff1a; 继承这些接口&#xff0c;可以使Spring找到自定义的数据库操作接口&#xff0c;并生成代理类&#xff0c;后续可以注入到Spring容器中&#xff1b;可以不写相关的sql操作&#xff0c;由代理类生成 他…

UGC、PGC、OGC比较详解

UGC、OGC 和 PGC &#xff0c;是网络平台上三种常见的内容生产模式&#xff0c;本文主要对其差别进行比较。 UGC模式 UGC&#xff08;全称为 User Generated Content&#xff0c;即用户输出内容&#xff09; 主要是通过激励用户生产内容&#xff0c;形成社区氛围。 UGC模式…

UGC、PGC、OGC

UGC模式 UGC&#xff08;全称为&#xff1a;User Generated Content&#xff0c;即用户输出内容&#xff09;主要是通过激励用户生产内容&#xff0c;形成社区氛围。 UGC模式以Web 2.0的博客&#xff0c;论坛为主要代表&#xff0c;任何一个用户都可以在平台上创造内容&#x…

pgc,ugc,ogc

一般认为Web2.0&#xff08;论坛、博客为代表&#xff09;和Web3.0&#xff08;社交平台、微博客为代表&#xff09;的相继流行&#xff0c;UGC&#xff08;User-generated Content&#xff0c;用户生产内容&#xff0c;也称UCC&#xff0c;User-created Content&#xff09;功…

DirectX3D游戏制作之---游戏界面的设计

前言&#xff1a; 再深沉的感情&#xff0c;再真挚的牵挂&#xff0c;还是会有分开的一天......到头来又怎么敌得过生离死别...... -------韩菱纱《仙剑奇侠传四》 PS&#xff1a;为了方便大家阅读&#xff0c;个人认为比较重要的内容-------红色字体显示 个人认为可以了解的内…

UltraGCN Ultra Simplification of Graph Convolutional

UltraGCN: Ultra Simplification of Graph Convolutional Networks for Recommendation 三个缺点 本文首先指出了LightGCN的三个缺点&#xff1a; 消息传递期间在边缘上的分配的权重与直觉相反。传播过程中未能区分不同类型关系对&#xff08;用户项目&#xff0c;项目项目&…

UE4中的UMG与DPI(一)

我们在UE4中进行UI界面设计的时候&#xff0c;有没有考虑过一个问题&#xff0c;我们的UI界面到底是多大的&#xff1f;我们把一个按钮设置成32x32的时候&#xff0c;它在设备上占据的真的是32x32的大小吗&#xff1f;今天就稍微对这个问题加以研究一下。 目录 UMG的设计画布…

Unity URP 中 GPU Instancing的使用

前言 本文讨论在Unity URP中&#xff0c;如何使用GPU Instancing&#xff0c;以及和Static Batching, SRPBatcher的关系。 几种Batching方式的原理简述 Static Batching 将一组静态物体的模型batch成一个模型&#xff0c;并作为一个整体提交的GPU。绘制的时候这些物体可以正…

1.1中断攻击:UDP Flood拒绝服务攻击与防范

1、补充知识&#xff1a; VMware的三种模式&#xff1a;桥接模式、NAT模式、仅主机模式。 &#xff08;1&#xff09;桥接模式&#xff1a;在此模式下&#xff0c;虚拟机网卡与主机物理网卡通过虚拟网桥进行通信&#xff0c;虚拟机与主机在同一个局域网下&#xff0c;也就是在…

TCP/IP OSI各层协议,ARP属于哪一层的协议

在OSI模型中ARP协议属于链路层&#xff1b;而在TCP/IP模型中&#xff0c;ARP协议属于网络层。 1)ARP分层的位置是TCP/IP的网络层 2)ARP报文是由以太网帧进行封装传输的。没有封装进IP包。 3&#xff09;实际上&#xff0c;对网络接口层的以太网帧来讲&#xff0c;它们同样是…

GPG Overview

Overview PGP目前支持的算法 非对称算法: RSA, ELG, DSA, ECDH, ECDSA, EDDSA对称算法: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256哈希算法: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224压缩算法: Uncompres…

Umi‘s Friends——突破GameFi传统,游戏界新的P2E潮流先锋

“打破GameFi传统玩法&#xff0c;Umis Friends引领玩赚新趋势”主题AMA活动圆满落幕&#xff01; 2023年3月25日晚上20点整&#xff0c;Umis Friends官方Discord迎来了一场热闹非凡的AMA活动。此次演讲嘉宾为Umis Friends CTO Mike和中文社区Mod Frank。两位嘉宾为Umis Frien…

【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

本系列文章由zhmxy555&#xff08;毛星云&#xff09;编写&#xff0c;转载请注明出处。 文章链接&#xff1a; http://blog.csdn.net/poem_qianmo/article/details/16922703 作者&#xff1a;毛星云&#xff08;浅墨&#xff09; 邮箱&#xff1a; happylifemxy163.com …
最新文章