Android开发的应用除了程序应用,还有是Widget应用。好多人会开发程序应用而不会开发Widget应用。本帖子就是帮助大家学习如何开发Widget应用的。可要多谢您捧场。

呀。

先简单说说Widget的原理。Widget是在桌面上的一块显示信息的东西,也通过单击Widget跳转到一个程序里面。而系统自带的程序,典型的Widget是music,这个Android内置的音乐播放小程序。这个是典型的Widget+app应用。就是一个程序既可以通过Widget启动,也可以通过App启动。Widget就是一个AppWidgetProvider+一个UI界面显示(预先绑定了好多Intent),界面上的信息可以通过程序控制而改变,单击Widget,上的控件只能激发发送一个Intent,或发出一个Service的启动通知。而AppWidgetProvider可以拦截这个Intent,而进行相应的处理(比如显示新的信息)。

Android开发里要大量的通过手动的方式配置好多xml文件。这对于.net开发来说不得不说是个梦靥呀。这也许也是一般的java程序员比.net程序的工资高的一个原因吧。毕竟做Java开发,特别是Android开发,确实很累。你可以看下源码对照着源码进行讲解。

我们先开发一个比较简单的Widget应用,实现的主要功能是可以通过的不断变化,而不断的显示当前时间。首先,要自己手动建一个名为xml的文件夹。

[attach]91110[/attach]

建一个xml文件,放进去一下东西:

android:minHeight="72px"

android:minWidth="72px"

android:updatePeriodMillis="3800000" android:initialLayout="@layout/main">

这个是Widget的显示设置,是对Widget属性的一个配置文件这个android:minHeight是Widget的高,这个android:minWidth

是Widget的宽。这个android:updatePeriodMillis属性是设置Widget页面的

更新页面的时间的频率。而这个android:initialLayout属性是表示的是初始化页面的布局,Android里画UI的地方都是通过xml文件,也可以通过代码程序来画,不过这样画的太麻烦了。

看下以下的文件系统,res文件夹是系统存放资源文件的目录。以drawable开头的文件夹是存放图片资源的文件夹。而后面的hdpi和ldpi等,都是平常在不同的状态如(横屏与竖屏时)系统调用不同的图片资源。Layout就是存放的一般都是xml,UI设计就是在这个layout文件夹里。Value里放的strings.xml就是从程序里分离的字符串,在实现国际化的时候可能会用到。

[attach]91109[/attach]

看看layout里的main.xml ,只有一个空间就是TextView,这个是用来显示时间用的。

建一个类TestAppWidget继承于AppWidgetProvider,而AppWidgetProvider继承与android.content.BroadcastReceiver,所以TestAppWidget就是一个拦截处理Intent的BroadcastReceiver,这些Intent只能在Androidmainfest里设置来拦截处理。

package com.sinxiao.widgetapp.setting;

import java.util.Calendar;

import com.sinxiao.widgetapp.R;

import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;

import android.content.BroadcastReceiver;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

import android.widget.RemoteViews;

public class TestAppWidget extends AppWidgetProvider {

private String tag="--------TestAppWidget";

private static

final String FRESH="com.sinxiao.app.fresh";

private Context mContext ;

private boolean run = true ;

/**

* 获得系统每秒

*/

BroadcastReceiver mBroadcast =newBroadcastReceiver() {

public void onReceive(Contextcontext, Intent intent) {

String action =intent.getAction();

if(action.equals(Intent.ACTION_TIME_TICK)) {

mContext.sendBroadcast(newIntent(FRESH));

}

}

};

/**

* 通知Widget每个1秒刷新一次

*/

Thread myThread = new

Thread(){

public void run() {

while (run) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

mContext.sendBroadcast(newIntent(FRESH));//通知刷新Widget的Intent

}

};

};

@Override

public void onUpdate(Contextcontext, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {//这个是每次Widget更新时调用的函数

用来给Widget刷新界面显示

Log.d(tag,"onUpdate");

super.onUpdate(context,appWidgetManager, appWidgetIds);

mContext = context;

RemoteViews views = newRemoteViews(context.getPackageName(),R.layout.main);

Calendar

cal=Calendar.getInstance();

System.out.println(cal.getTime().toLocaleString());

views.setTextViewText(R.id.txttim,cal.getTime().toLocaleString());

appWidgetManager.updateAppWidget(appWidgetIds,views);

myThread.start();

/**

* 本类作为一个bracastReveiver能自己再,注册个监听器

(可以取消注释,看报什么错误)

*/

//

context.registerReceiver(mBroadcast,new IntentFilter(Intent.ACTION_TIME_TICK));

}

@Override

public void onReceive(Contextcontext, Intent intent) {

Log.d(tag,"onReceive");

String action =intent.getAction();

Log.d(tag, "theaction is "+action);

if (FRESH.equals(action)){

showTime(context);

}elseif(Intent.ACTION_TIME_TICK.equals(action)){

showTime(context);

}

super.onReceive(context,intent);

}

private void showTime(Contextcontext) {

RemoteViews views = newRemoteViews(context.getPackageName(),R.layout.main);

Calendar

java widget_自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组相关推荐

  1. 将Java程序变成可执行文件的一个简单方法

    将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...

  2. java 语言 写字板_一个简单的java语言写字板.docx

    一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...

  3. android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...

    一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...

  4. java 缓存方法_Java实现一个简单的缓存方法

    Java实现一个简单的缓存方法 发布时间:2020-09-07 21:39:55 来源:脚本之家 阅读:99 作者:BrightLoong 缓存是在web开发中经常用到的,将程序经常使用到或调用到的对 ...

  5. java实现编译器_实现一个简单的编译器

    简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...

  6. java 围棋_Java.awt实现一个简单的围棋

    目录 0.前言 我小时候学过一段时间的围棋,可惜脑子不好使,是个臭棋篓子,到现在也有十多年的时间没有下过棋了,但是近几年围棋AI的出现,又让我重新关注了围棋 围棋真的很有意思,千变万化,有人简明的围空 ...

  7. java分布式dubbo_Dubbo剖析-搭建一个简单的分布式系统(1)

    一.前言 随着阿里巴巴开源的分布式RPC框架Dubbo成为Apache开源卵化器项目,Dubbo有火了一把.在接下来的一段时间本公众号将会时不时的发布一些dubbo使用与原理剖析的文章. image. ...

  8. 简单跑酷java代码_如何实现一个简单的跑酷游戏?(代码详解)

    本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 采用的物理引擎是:Phaser.js 官网地址:http:// ...

  9. Java Web创建并运行一个简单的网页

    @创建并运行一个简单的网页TOC 在使用eclipse创建运行一个web项目前,需安装和配置好Tomcat和jre. 1.新建一个项目 2.选择过滤器文本Dynamic Web Project 3.输 ...

最新文章

  1. idea上实现github代码同步
  2. 《3D数学基础》1.8 混合积
  3. Java中throw re_详解Java编程中throw和throws子句的使用方法
  4. JAVA学习笔记——常量与变量
  5. 面试题整理10 最小的k个数
  6. Mac安装RocketMQ和可视化控制台教程
  7. 学生用计算机中sto,STO 文件扩展名: 它是什么以及如何打开它?
  8. Linux 服务器高级编程ET LT代码
  9. Android/Linux立即从缓冲区写入磁盘
  10. 华为odjava机试题_手心里的咕咕机,华为手机大小,性价比赶超小米的学习打印机...
  11. CallStack获取函数堆栈
  12. mysql 合服_风云私服合区的方法详解(mysql数据库合并)
  13. 智能陈桥五笔输入法 for linux,解决在Linux下安装陈桥五笔输入法的方法
  14. 从测试流程角度,对产品质量的一些总结思考
  15. android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
  16. CM 安装及部署操作
  17. LINUX操作系统centos安装
  18. java如何创建列表的表头,java word设置表头
  19. 【linux】监控和管理linux进程
  20. 利用Python进行数据分析的学习笔记——chap6

热门文章

  1. 利用条件随机场模型进行中文分词
  2. 【公众号系列】站在烦恼里仰望幸福
  3. 袁永福的博客系列文章链接集合
  4. arttemplate模板引擎里面多层循环
  5. DIV 粘贴插入文本或者其他元素后,移动光标到最新处
  6. 客户端触发PostBack回发的两种写法
  7. Linux命令df,du 查看系统磁盘空间
  8. android基于plt/got的hook原理
  9. Android 关机流程 从kernel到framework
  10. Android相关属性的介绍:android:exported = true