appwidget实现textview显示时间
来源:互联网 发布:isnull sql 编辑:程序博客网 时间:2024/05/17 08:57
fristappwidget.xmlpackage test.widget;
import android.app.Activity;
import android.os.Bundle;
public class Widget_demo_2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstappwidget);
}
}
<?xml version="1.0" encoding="utf-8"?>Menifest.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_msg"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:textSize="20sp"
android:textColor="#ff0000"
>
</TextView>
</LinearLayout>
manifest中定义的receiver:MyAppWidgetProvider.java<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.widget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".MyAppWidgetProvider">
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_provider"/>
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
</receiver>
</application>
</manifest>
menifest中指定的resource:在res文件夹下新建xml文件夹,新建appwidget_provider.xmlpackage test.widget;
import java.util.ArrayList;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.net.Uri;
import android.widget.RemoteViews;
public class MyAppWidgetProvider extends AppWidgetProvider{
private static Timer mTimer;
// mAppWidgetArray 保存窗口部件实例的数组
private static ArrayList<int[]> mAppWidgetArray = new ArrayList<int[]>();
private static RemoteViews mRemoteViews;
// 当最后一个窗口部件实例被移除时调用
public void onDisabled(Context context) {
// TODO Auto-generated method stub
super.onDisabled(context);
stopTimerTask();
}
// 当第一个窗口部件实例被创建时调用
public void onEnabled(Context context) {
// TODO Auto-generated method stub
super.onEnabled(context);
startTimerTask(context);
}
// @Override
// public void onUpdate(Context context, AppWidgetManager appWidgetManager,
// int[] appWidgetIds) {
// super.onUpdate(context, appWidgetManager, appWidgetIds);
// int N = appWidgetIds.length;
// System.out.println("MyAppWidgetProvider onUpdate : " + N);
// for(int i = 0 ; i < N ; i++){
// int appWidgetId = appWidgetIds[i];
// System.out.println("appWidgetId : i = " + i + "appWidgetId = " + appWidgetId);
//// RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.firstappwidget);
// mRemoteViews = new RemoteViews(context.getPackageName(),R.layout.firstappwidget);
// System.out.println("views : " + mRemoteViews);
// java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
// String date = df.format(new Date());
// System.out.println("date : " + date);
// mRemoteViews.setTextViewText(R.id.tv_msg, "当前时间:" + date);
// appWidgetManager.updateAppWidget(appWidgetId, mRemoteViews);
// System.out.println("更新。。。");
// updateAppWidget(context, appWidgetManager, appWidgetIds);
// addInstance(appWidgetIds);
// }
//
// }
// 窗口部件实例创建时调用
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
updateAppWidget(context, appWidgetManager, appWidgetIds);
addInstance(appWidgetIds);
}
// 窗口部件实例删除时调用
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
removeInstance(appWidgetIds);
}
// 更新单个窗口部件实例
public static void updateAppWidget(Context context,
AppWidgetManager appWidgeManger, int []appWidgetIds) {
mRemoteViews = new RemoteViews(context.getPackageName(), R.layout.firstappwidget);
MyTimeAdapter timeAdapter = new MyTimeAdapter();
String timeString = timeAdapter.formatTime();
// String http = "http://192.168.170.34:7080/Analy/action/SynchroDataWeb!getLettersList.action?params={\"loginId\":\"test\"}";
// mRemoteViews.setUri(R.id.webview, "getLettersList", Uri.parse(http));
mRemoteViews.setTextViewText(R.id.tv_msg, timeString);
// mRemoteViews.addView(viewId, nestedView)
// mRemoteViews.setUri(viewId, methodName, value)
appWidgeManger.updateAppWidget(appWidgetIds, mRemoteViews);
}
// 更新所有窗口部件实例
public static void RefreshAllWidget(Context context){
AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);
int instanceCount = mAppWidgetArray.size();
for(int i = 0; i < instanceCount; i++){
int[] appWidgetIds = mAppWidgetArray.get(i);
updateAppWidget(context, appWidgetManger, appWidgetIds);
}
}
// 增加窗口部件实例
public static void addInstance(int[] appWidgetIds){
if (mAppWidgetArray != null){
mAppWidgetArray.add(appWidgetIds);
}
}
// 删除窗口部件实例
public static void removeInstance(int[] appWidgetIds){
if (mAppWidgetArray != null){
mAppWidgetArray.remove(appWidgetIds);
}
}
// 开启刷新窗口部件的定时器
public static void startTimerTask(final Context context){
if (mTimer == null){
mTimer = new Timer();
TimerTask mTimerTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
MyAppWidgetProvider.RefreshAllWidget(context);
}
};
mTimer.schedule(mTimerTask, 0, 1000);
}
}
// 关闭刷新窗口部件的定时器
public static void stopTimerTask(){
if (mTimer != null){
mTimer.cancel();
mTimer = null;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="200dp"
android:minHeight="30dp"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/firstappwidget"/>
说明:在如上xml中定义的android:updatePeriodMillis属性据说在android2.2以下版本才会生效,用来设置每隔多长时间刷新appwidget.
android2.2(包括)以上版本无效,所以在MyAppWidgetProvider中使用Timer、TimerTask来实现时间的刷新
- appwidget实现textview显示时间
- Android TextView实现显示时间变化
- android实现textview显示系统时间
- 实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
- Android实现TextView走马灯效果同时自动更新显示当前时间
- TextView显示更多的实现
- TextView实现自动滚动显示
- textview实现html的显示
- TextView显示系统时间(秒针变化)
- 用TextView显示时间(数码管样式)
- TextView显示系统时间(秒针变化)
- TextView中动态显示系统时间
- TextView显示系统时间(秒针变化)
- TextView实现一行居中显示,多行居左显示
- TextView实现一行居中显示,多行居左显示
- TextView实现一行居中显示,多行居左显示。
- 现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
- Android实战简易教程-第六十八枪(android小工具appwidget之时间显示)
- 复制文件
- android 截屏并将其保存成jpeg图片格式
- android实现类似iphone的开关按钮
- 顶级浮动窗口
- 冒泡排序
- appwidget实现textview显示时间
- 绘制双曲线view
- popowindow 快速添加
- android 画饼图并旋转
- 从现在开始的面试积累(陆续更新)
- service更新UI
- java中String Date Timestamp Calendar 之间的关系及转换
- android ClipboardManager(剪贴板管理器)
- android ConnectivityManager主要管理和网络连接相关的操作