android之Widget开发详解实例一「建议收藏」

Android Widget开发案例实现是本文要介绍的内容,主要是来了解并学习Android Widget开发应用,今天我们要写一下Android Widget的开发,由于快点凌晨,我就不说的太具体了,同志们就模仿吧!首先看一下效果图: 下面是Demo的详细步骤:一、新建一个Android工程命名为:WidgetDemo.二、准备素材,一个是Widget的图标,一个是W

大家好,又见面了,我是全栈君。

Android Widget开发案例实现是本文要介绍的内容,主要是来了解并学习Android Widget开发应用,今天我们要写一下Android Widget开发,由于快点凌晨,我就不说的太具体了,同志们就模仿吧!首先看一下效果图:

解析Android Widget开发案例实现


 
下面是Demo的详细步骤:

一、新建一个Android工程命名为:WidgetDemo.

二、准备素材,一个是Widget的图标,一个是Widget的背景。存放目录如下图:

解析Android Widget开发案例实现

三、修改string.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>    
<resources>    
    <string name="hello">Hello World, WidetDemo!</string>    
    <string name="app_name">DaysToWorldCup</string>    
</resources>   

四、建立Widget内容提供者文件,我们在res下建立xml文件夹,并且新建一个widget_provider.xml代码入下:

<?xml version="1.0" encoding="utf-8"?>    
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"    
    android:minWidth="50dip"    
    android:minHeight="50dip"    
    android:updatePeriodMillis="10000"    
    android:initialLayout="@layout/main"/>    

其中宽度、长度很清楚,还有android:updatePeriodMillis是自动更新的时间间隔,android:initialLayout是Widget的界面描述文件。

还有一个属性Android:configure是可选的,如果你的Widget需要在启动时先启动一个Activity,则需要设定该项为你的Activity。

五、修改main.xml布局,代码如下:

<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:orientation="vertical"    
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    android:background="@drawable/wordcup"    
    >    
<TextView      
    android:id="@+id/wordcup"    
    android:layout_width="fill_parent"     
    android:layout_height="wrap_content"     
    android:text="@string/hello"    
    android:textSize="12px"    
    android:textColor="#ff0000"    
    />    
</LinearLayout>

六、修改WidgetDemo.java代码如下:

package com.android.tutor;    
import java.util.Calendar;    
import java.util.Date;    
import java.util.GregorianCalendar;    
import java.util.Timer;    
import java.util.TimerTask;    
import android.appwidget.AppWidgetManager;    
import android.appwidget.AppWidgetProvider;    
import android.content.ComponentName;    
import android.content.Context;    
import android.widget.RemoteViews;    
public class WidetDemo extends AppWidgetProvider {    
    /** Called when the activity is first created. */    
      
    @Override    
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,    
            int[] appWidgetIds) {    
            
        Timer timer = new Timer();    
        timer.scheduleAtFixedRate(new MyTime(context,appWidgetManager), 1, 60000);    
        super.onUpdate(context, appWidgetManager, appWidgetIds);    
    }    
        
    private class MyTime extends TimerTask{    
        RemoteViews remoteViews;    
        AppWidgetManager appWidgetManager;    
        ComponentName thisWidget;    
            
        public MyTime(Context context,AppWidgetManager appWidgetManager){    
            this.appWidgetManager = appWidgetManager;    
            remoteViews = new RemoteViews(context.getPackageName(),R.layout.main);    
                
            thisWidget = new ComponentName(context,WidetDemo.class);    
        }    
        public void run() {    
                
            Date date = new Date();    
            Calendar calendar = new GregorianCalendar(2010,06,11);    
            long days = (((calendar.getTimeInMillis()-date.getTime())/1000))/86400;    
            remoteViews.setTextViewText(R.id.wordcup, "距离南非世界杯还有" + days+"天");    
            appWidgetManager.updateAppWidget(thisWidget, remoteViews);    
                
        }    
    }    
}   

七、修改配置文件AndroidManifest.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>    
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    
      package="com.android.tutor"    
      android:versionCode="1"    
      android:versionName="1.0">    
    <application android:icon="@drawable/icon" android:label="@string/app_name">    
        <receiver android:name=".WidetDemo"    
                  android:label="@string/app_name">    
            <intent-filter>    
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />    
            </intent-filter>    
            <meta-data android:name="android.appwidget.provider"    
                       android:resource="@xml/widget_provider"/>    
        </receiver>    
    </application>    
    <uses-sdk android:minSdkVersion="7" />    
</manifest>    

其中

<receiver android:name=".WidetDemo"    android:label="@string/app_name">    

name指定该Widget的接收者是WidetDemo,即你建立的AppWidgetProvider子类,label指定该Widget的标签,还可以用属性icon指定图标

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

是采用android文档中提供的,用于接收更新的intent意图

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

resource指定该Widget的描述信息,该描述中定义了Widget的相关信息,如该Widget的宽度、长度、自动更新的间隔时间等信息,也就是前面四所定义的内容

八、点击运行(Ctrl+F11),之,运行成功后,我们长时间点击桌面,会出现如下俩个,依次点击,就可以看到最上面的效果图:

解析Android Widget开发案例实现 解析Android Widget开发案例实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121420.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月10日 下午2:00
下一篇 2022年3月10日 下午3:00


相关推荐

  • 如何屏蔽SIGPIPE信号

    如何屏蔽SIGPIPE信号#include<stdlib.h>#include<sys/signal.h>//默认读写一个关闭的socket会触发sigpipe信号该信号的默认操作是关闭进程这明显是我们不想要的//所以我们需要重新设置sigpipe的信号回调操作函数比如忽略操作等使得我们可以防止调用它的默认操作//信号的处理是异步操作也就是说在这一条语句以后继续往下执行中如果碰到信号依旧会调用信号的回调处理函数//处理sigpipe信号voidhandle_for_s

    2022年5月30日
    36
  • Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)

    勿在流沙住高台,出来混迟早要还的。做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!上一篇分享了JVM及其启动流程,今天介绍一下JVM内部的一些区域,以及具体的区域在运行过程中会发生哪些异内存常! 其实也就对应了内存管理的第一篇中 JVM的第三个阶段,程序运行内存溢出。知识地图:一、概述Java的内存管理采用[自动内存管理]机制,因为这个自动管理机制,Ja…

    2022年2月28日
    38
  • 深入理解Java枚举类型(enum)

    深入理解Java枚举类型(enum)版权申明 未经博主同意 谢绝转载 请尊重原创 博主保留追究权 http blog csdn net javazejian article details 出自 zejian 的博客 关联文章 深入理解 Java 类型信息 Class 对象 与反射机制深入理解 Java 枚举类型 enum 深入理解 Java 注解类型 Annotation 深入理解

    2026年3月19日
    2
  • 最近200篇文章汇总

    最近200篇文章汇总虚拟偶像行业分析 SVG 实战 实现港珠澳大桥 logoWeb 开发者的简历模板优秀员工评审表模板年度员工总结模板前端原生开发解决方案四大正切圆柱投影 CSS 实现最简洁的四角边框 CSS 实现最简洁的加载动画用最少的代码渲染 3D 模型中心透视圆柱投影正轴等距离切圆柱投影等角切圆柱投影的证明等面积圆柱投影的简单证明等面积圆柱投影的证明升级 转载 TMS 协议简介新生代民工书籍推

    2026年3月26日
    2
  • 《JavaScript 模式》读书笔记(7)— 设计模式1

    这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。虽然这些设计模式是与语言和实现方式无关的,并且人们已经对此研究了多年,但都主要是从强

    2022年3月25日
    44
  • JACK——AgentManual9 Beliefset Relations

    JACK——AgentManual9 Beliefset Relations

    2021年8月17日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号