Android中widget编写注意事项——1(程序成功执行Done却没有widget)
2011-10-26 16:04
701 查看
大家都知道Android中的widget是个很有爱的东东啦~所以使用这个东东的people也一定很多!当然在使用过程中也就会出现不少“不正常”的地方喽~
不急,先来个实例代码,题中所述的问题的解决办法在实例后面再说哈~
首先,是Manifest文件
然后,是layout下的main.xml文件
回到题中说到的异常哈,其实这个问题在编译时一点问题都没有的,大家也看到啦,工程中并没有什么红色的叉叉的,而且运行的Log也提示运行成功,那到底为什么就找不到我们创建的widget呢?
其实很简单啦,关键就只是Manifest文件中的那个元数据!!!对,就是那个meta-data啦,以前的工程中可能会写成META-data,这样看没啥错的,但是运行出来的结果就是没有我们要的widget哈,这边只要把大写都改成小写,也就是写成meta-data就OK啦~~~大家再试试看看吧,出来了吧^_^ O(∩_∩)O哈哈~
不急,先来个实例代码,题中所述的问题的解决办法在实例后面再说哈~
首先,是Manifest文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.widget" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:label="Hello,App Widget" android:name=".HelloWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/provider_info" /> </receiver> </application> </manifest>
然后,是layout下的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/p1"> <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:textSize="10px" android:textColor="#ff0000"/> </LinearLayout>再然后,在res目录下新建一个xml文件夹,在此文件夹中新建一个provider_info.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"/>最后最后,主角——java代码WidgetActivity.java
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.util.Log; //AppWidgetProvider 是 BroadcastReceiver 的子类,本质是个 广播接收器,它专门用来接收来 自Widget组件的各种请求(用Intent传递过来),所以如果让我给他起名的话 我会给他命名为AppWidgetReceiver,每一个Widget都要有一个AppWidgetProvider. public class WidgetActivity extends AppWidgetProvider { //每个请求都会传递给onReceive方法,该方法根据Intent参数中的action类型来决定自己处理还是分发给下面四个特殊的方法。 @Override public void onReceive(Context context, Intent intent) { Log.i("yao", "HelloWidgetProvider --> onReceive"); super.onReceive(context, intent); } //如果Widget自动更新时间到了、或者其他会导致Widget发生变化的事件发生,或者说Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那么会调用onUpdate,下面三个方法类似 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //AppWidgetManager 顾名思义是AppWidget的管理器,appWidgetIds 桌面上所有的widget都会被分配一个唯一的ID标识,那么这个数组就是他们的列表 Log.i("yao", "HelloWidgetProvider --> onUpdate"); super.onUpdate(context, appWidgetManager, appWidgetIds); } //当一个App Widget从桌面上删除时调用 @Override public void onDeleted(Context context, int[] appWidgetIds) { Log.i("yao", "HelloWidgetProvider --> onDeleted"); super.onDeleted(context, appWidgetIds); } //当这个App Widget第一次被放在桌面上时调用(同一个App Widget可以被放在桌面上多次,所以会有这个说法) @Override public void onEnabled(Context context) { Log.i("yao", "HelloWidgetProvider --> onEnabled"); super.onEnabled(context); } //当这个App Widget的最后一个实例被从桌面上移除时会调用该方法。 @Override public void onDisabled(Context context) { Log.i("yao", "HelloWidgetProvider --> onDisabled"); super.onDisabled(context); }OK,以上就是整个widget的小工程啦,当然这个只是实现基本的功能,并没有添加额外的什么哈~
回到题中说到的异常哈,其实这个问题在编译时一点问题都没有的,大家也看到啦,工程中并没有什么红色的叉叉的,而且运行的Log也提示运行成功,那到底为什么就找不到我们创建的widget呢?
其实很简单啦,关键就只是Manifest文件中的那个元数据!!!对,就是那个meta-data啦,以前的工程中可能会写成META-data,这样看没啥错的,但是运行出来的结果就是没有我们要的widget哈,这边只要把大写都改成小写,也就是写成meta-data就OK啦~~~大家再试试看看吧,出来了吧^_^ O(∩_∩)O哈哈~
相关文章推荐
- Android 程序执行Linux命令的解决方法及注意事项
- android 程序执行linux命令注意事项
- 编写跨平台Java程序注意事项
- Android.mk文件编写以及import-module的注意事项与NDK_MODULE_PATH的配置
- 编写基于DSP程序的注意事项
- 一段评价程序平均运行时间的shell脚本&shell脚本编写注意事项
- Delphi编写服务端程序注意事项
- android自动更新程序,安装完以后就什么都没有了,没有出现安装成功的界面的问题
- android 在代码中动态的变更wight和height注意事项 Caused by: java.lang.ClassCastException:android.widget.LinearLayou
- WPF:自动执行"机器人"程序若干注意事项(转载)
- MFC 带comm口控件程序编写及使用注意事项
- 编写跨平台Java程序注意事项
- Visual Studio2017中编写ASP.NET程序时使用C# 7.0元组Tuple新特性的一点注意事项
- mapreduce程序编写注意事项
- Android 动态壁纸(Live Wallpaper)编写注意事项小记
- android自动更新程序,安装完以后就什么都没有了,没有出现安装成功的界面的问题
- C++ CLI 程序编写注意事项
- 编写日历程序的注意事项
- 在Android上运行C语言编写的可执行程序
- 编写跨平台Java程序注意事项