java widget_自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组
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群组相关推荐
- 将Java程序变成可执行文件的一个简单方法
将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...
- java 语言 写字板_一个简单的java语言写字板.docx
一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...
- android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...
一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...
- java 缓存方法_Java实现一个简单的缓存方法
Java实现一个简单的缓存方法 发布时间:2020-09-07 21:39:55 来源:脚本之家 阅读:99 作者:BrightLoong 缓存是在web开发中经常用到的,将程序经常使用到或调用到的对 ...
- java实现编译器_实现一个简单的编译器
简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...
- java 围棋_Java.awt实现一个简单的围棋
目录 0.前言 我小时候学过一段时间的围棋,可惜脑子不好使,是个臭棋篓子,到现在也有十多年的时间没有下过棋了,但是近几年围棋AI的出现,又让我重新关注了围棋 围棋真的很有意思,千变万化,有人简明的围空 ...
- java分布式dubbo_Dubbo剖析-搭建一个简单的分布式系统(1)
一.前言 随着阿里巴巴开源的分布式RPC框架Dubbo成为Apache开源卵化器项目,Dubbo有火了一把.在接下来的一段时间本公众号将会时不时的发布一些dubbo使用与原理剖析的文章. image. ...
- 简单跑酷java代码_如何实现一个简单的跑酷游戏?(代码详解)
本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 采用的物理引擎是:Phaser.js 官网地址:http:// ...
- Java Web创建并运行一个简单的网页
@创建并运行一个简单的网页TOC 在使用eclipse创建运行一个web项目前,需安装和配置好Tomcat和jre. 1.新建一个项目 2.选择过滤器文本Dynamic Web Project 3.输 ...
最新文章
- idea上实现github代码同步
- 《3D数学基础》1.8 混合积
- Java中throw re_详解Java编程中throw和throws子句的使用方法
- JAVA学习笔记——常量与变量
- 面试题整理10 最小的k个数
- Mac安装RocketMQ和可视化控制台教程
- 学生用计算机中sto,STO 文件扩展名: 它是什么以及如何打开它?
- Linux 服务器高级编程ET LT代码
- Android/Linux立即从缓冲区写入磁盘
- 华为odjava机试题_手心里的咕咕机,华为手机大小,性价比赶超小米的学习打印机...
- CallStack获取函数堆栈
- mysql 合服_风云私服合区的方法详解(mysql数据库合并)
- 智能陈桥五笔输入法 for linux,解决在Linux下安装陈桥五笔输入法的方法
- 从测试流程角度,对产品质量的一些总结思考
- android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
- CM 安装及部署操作
- LINUX操作系统centos安装
- java如何创建列表的表头,java word设置表头
- 【linux】监控和管理linux进程
- 利用Python进行数据分析的学习笔记——chap6