appwidget窗口小部件少了很多时不可以使用哪个布局

Android窗口小部件App Widgets开发简明教程
&先简单说说App Widget的原理。App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类。而系统自带的程序,典型的App Widget是music,这个Android内置的音乐播放小程序。这个是典型的App Widget+app应用。就是一个程序既可以通过App Widget启动,也可以通过App启动。App Widget就是一个AppWidgetProvider+一个UI界面显示(预先绑定了好多Intent),界面上的信息可以通过程序控制而改变,单击Widget上的控件只能激发发送一个Intent,或发出一个Service的启动通知。而AppWidgetProvider可以拦截这个Intent,而进行相应的处理(比如显示新的信息)。 以下模拟一下App Widget的应用通过两种方式启动应用程序1、App Widget启动长按空白的桌面主屏幕会弹出“添加到主屏幕”,然后选择“窗口小部件”选项进入“选择窗口小部件”,最后选择想要的小部件就会添加到桌面主屏幕,当点击刚才添加的桌面控件就会进入到程序主入口。2、App启动:跟普通的Activity一样以下为实现代码main.xml布局文件,程序入口类的界面my_layout.xml布局文件:带一个图片的按钮&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"&
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="程序入口" /&
&/LinearLayout&&类MainActivity程序入口类
package eoe.
import android.app.A
import android.os.B
* 主程序入口类
* @author jiqinlin
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}&下面的代码才是开发AppWidget用到的代码&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"&
&!-- &ImageView
xmlns:android="/apk/res/android"
android:id="@+id/imageView"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content" /& --&
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="@drawable/png1"/&
&/LinearLayout&&my_appwidget.xml布局文件:&?xml version="1.0" encoding="utf-8"?&
&!-- AppWidgetProvderInfo: 描述AppWidget的大小、更新频率和初始界面等信息,以XML文件形式存在于应用的res/xml/目录下。
注意:SDK1.5之后此android:updatePeriodMillis就失效了,要自己创建service更新
&appwidget-provider
xmlns:android="/apk/res/android"
android:minWidth="75dip"
android:minHeight="45dip"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/my_layout"/&&清单文件&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="/apk/res/android"
package="eoe.demo" android:versionCode="1"
android:versionName="1.0"&
&application android:icon="@drawable/icon" android:label="@string/app_name"&
&activity android:name=".MainActivity" android:label="主程序"&
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
&!-- TestActivity类为一个广播接收器,因为TestActivity继承自AppWidgetProvider --&
&receiver android:name=".TestActivity" android:label="添加桌面控件"&
&intent-filter&
&action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&
&/intent-filter&
&meta-data android:name="android.appwidget.provider"
android:resource="@xml/my_appwidget"/&
&/receiver&
&/application&
&uses-sdk android:minSdkVersion="7" /&
&/manifest&&TestActivity类package eoe.
import android.app.PendingI
import android.appwidget.AppWidgetM
import android.appwidget.AppWidgetP
import ponentN
import android.content.C
import android.content.I
import android.widget.RemoteV
* 为手机添加桌面控件,当点击桌面控件时则进入主程序
* AppWidgetProvider:继承自BroadcastRecevier,在AppWidget应用update、enable、disable和delete时接收通知。
* 其中,onUpdate、onReceive是最常用到的方法,它们接收更新通知
* @author jiqinlin
public class TestActivity extends AppWidgetProvider {
* 用来间隔的更新App Widget,间隔时间用AppWidgetProviderInfo里的updatePeriodMillis属性定义(单位为毫秒)。
* 注意:SDK1.5之后此android:updatePeriodMillis就失效了,要自己创建service更新。
* 这个方法也会在用户添加App Widget时被调用,因此它应该执行基础的设置,比如为视图定义事件处理器并启动一个临时的服务Service,如果需要的话。
* 但是,如果你已经声明了一个配置活动,这个方法在用户添加App Widget时将不会被调用,
* 而只在后续更新时被调用。配置活动应该在配置完成时负责执行第一次更新。
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
System.out.println("onUpdate");
//点击桌面组件时进入主程序入口
Intent intent=new Intent(context, MainActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, intent, 0);
//RemoteViews类描述了一个View对象能够显示在其他进程中,可以融合layout资源文件实现布局。
//虽然该类在android.widget.RemoteViews而不是appWidget下面,但在Android Widgets开发中会经常用到它,
//主要是可以跨进程调用(appWidget由一个服务宿主来统一运行的)。
RemoteViews myRemoteViews = new RemoteViews(context.getPackageName(), R.layout.my_layout);
//myRemoteViews.setImageViewResource(R.id.imageView, R.drawable.png1);//设置布局控件的属性(要特别注意)
myRemoteViews.setOnClickPendingIntent(R.id.btn, pendingIntent);
ComponentName myComponentName = new ComponentName(context, TestActivity.class);
//负责管理AppWidget,向AppwidgetProvider发送通知。提供了更新AppWidget状态,获取已经安装的Appwidget提供信息和其他的相关状态
AppWidgetManager myAppWidgetManager = AppWidgetManager.getInstance(context);
myAppWidgetManager.updateAppWidget(myComponentName, myRemoteViews);
* 当App Widget从宿主中删除时被调用。
public void onDeleted(Context context, int[] appWidgetIds) {
System.out.println("onDeleted");
super.onDeleted(context, appWidgetIds);
* 当一个App Widget实例第一次创建时被调用。
* 比如,如果用户添加两个App Widget实例,只在第一次被调用。
* 如果你需要打开一个新的数据库或者执行其他对于所有的App Widget实例只需要发生一次的设置,
* 那么这里是完成这个工作的好地方。
public void onEnabled(Context context) {
System.out.println("onEnabled");
super.onEnabled(context);
* 当你的App Widget的最后一个实例被从宿主中删除时被调用。你应该在onEnabled(Context)中做一些清理工作,比如删除一个临时的数据库
public void onDisabled(Context context) {
System.out.println("onDisabled");
super.onDisabled(context);
* 接收到每个广播时都会被调用,而且在上面的回调函数之前。
* 你通常不需要实现这个方法,因为缺省的AppWidgetProvider实现过滤所有App Widget广播并恰当的调用上述方法。
* 注意: 在Android 1.5中,有一个已知问题,onDeleted()方法在调用时不被调用。
* 为了规避这个问题,你可以像Group post中描述的那样实现onReceive()来接收这个onDeleted()回调。
public void onReceive(Context context, Intent intent) {
System.out.println("onReceive");
super.onReceive(context, intent);
上一篇: 调试Media播放时,不时用到SurfaceView与SurfaceHolder对象,写case测试及实际运行效果, 基本上搞清楚这两个对象的用法及区别 1、SurfaceView public class SurfaceView extends View SurfaceView是视图(View)的继承类, 这个视图里内嵌了一个专门用于绘制
下一篇: 应用程序部件的微型应用程序的意见,可以嵌入到其他应用程序(如主屏幕)并得到定期更新。这些观点被称为窗口的用户界面,你可以发布一个软件部件供应商。应用程序组件,可以容纳其他应用程序的窗口被称为一个应用程序组件主机。下面的截图显示音乐应用部件窗口小部件――Widget --嵌入式学院(华清远见旗下品牌)
窗口小部件――Widget
作者:韩老师,讲师。
1. 什么是Widget
在Android手机主界面上我们经常会看到很多图标,这些图标有的是系统应用程序,比如时钟,日期,设置等,也有用户安装的第三方应用,比如天气预报,游戏等,这种类似于Windows桌面快捷方式的小部件就是Widget。
2. Widget的开发步骤
(1) 创建一个XML布局文件,此布局文件用来显示定义在Widget中的组件,需要注意的是,Widget仅支持一下10类组件:
&&&&&&&&① FrameLayout
&&&&&&&&② LinearLayout
&&&&&&&&③ RelativeLayout
&&&&&&&&④ AnalogClock
&&&&&&&&⑤ Button
&&&&&&&&⑥ Chronometer
&&&&&&&&⑦ ImageButton
&&&&&&&&⑧ ImageView
&&&&&&&&⑨ ProgressBar
&&&&&&&&⑩ TextView
(2) 创建一个XML类型的Widget描述文件,这里需要在res资源文件夹下新建一个xml文件夹,将写好的XML文件放到里面去。XML文件格式如下:
&&&&&&&&< appwidget-provider xmlns:android="/apk/res/android"
&&&&&&&&&&&&&&&&android:minWidth="294dp"
&&&&&&&&&&&&&&&&android:minHeight="146dp"
&&&&&&&&&&&&&&&&android:updatePeriodMillis="0"
&&&&&&&&android:initialLayout="@layout/app_widget"/>
其中minWidth和minHeight属性表示Widget的最小宽度和最小高度。updatePeriodMillis表示Widget更新间隔的时间(单位:毫秒),参数“0”表示不更新,若要更新,则要输入间隔的时长。使用此属性时会调用onUpdate方法来更新Widget。initialLayout参数就是第一步所创建的显示Widget的布局文件。
(3) 创建一个类,继承AppWidgetProvider(该类是BroadcastReceiver的子类,所以Widget类可以接收广播),AppWidgetProvider定义了一些接收Widget各种事件的方法,其中onUpdate方法较为常用,此方法主要用来更新Widget中的组件。
(4) 最后一步就是在AndroidManifest.xml中注册一个receiver,格式如下:
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
其中android:resource参数为第二步中创建的xml文件的资源ID。在标签中必须使用标签定义一个APPWIDGET_UPDATE广播,表明Widget可以接收Update广播。只有这个广播必须定义,其他的广播并不需要标签中定义。AppWidget框架会自动将除了Update广播外的其他AppWidget广播发送给AppWidgetProvider。
3. Widget实例
>> 本实例是在主页面上显示一个带图片的Widget,下面具体介绍一下Widget的创建过程。
(1) 新建一个Android工程,布局文件widgetmain.xml内容如下:
&&&&&&&&< ImageView android:id="@+id/imageview"
&&&&&&&&&&&&&&&&android:layout_width="fill_parent"
&&&&&&&&&&&&&&&&android:layout_height="fill_parent"
&&&&&&&&&&&&&&&&android:src="@drawable/ic_launcher"/>
(2)在res资源文件夹下新建一个xml文件夹,新建一个XML文件(appwidget.xml),具体内容如下:
&&&&&&&&< appwidget-provider xmlns:android="/apk/res/android"
&&&&&&&&&&&&&&&&android:minWidth="294dp"
&&&&&&&&&&&&&&&&android:minHeight="146dp"
&&&&&&&&&&&&&&&&android:updatePeriodMillis="0"
&&&&&&&&android:initialLayout="@layout/widgetmain"/>
(3)创建一个类,继承AppWidgetProvider,代码如下:
&&&&&&&&import android.appwidget.AppWidgetM
&&&&&&&&import android.appwidget.AppWidgetP
&&&&&&&&import android.content.C
&&&&&&&&import android.widget.RemoteV
&&&&&&&&public class WidgetDemo extends AppWidgetProvider
&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&// TODO Auto-generated method stub
&&&&&&&&&&&&&&&&&&&&&&&&super.onUpdate(context, appWidgetManager, appWidgetIds);
&&&&&&&&&&&&&&&&}
(4)在AndroidManifest.xml中注册receiver
&&&&&&&&< application
&&&&&&&&&&&&&&&&android:icon="@drawable/ic_launcher"
&&&&&&&&&&&&&&&&android:label="@string/app_name"
&&&&&&&&&&&&&&&&android:theme="@style/AppTheme" >
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
在运行本实例后主界面并没有出现Widget,这里需要长按主页面,选中Widgets子项,找到刚才我们编写的程序,点击才可以看到,如图所示:下次自动登录
现在的位置:
& 综合 & 正文
Android中实现Launcher功能之二 &#8212;&#8211; 添加窗口小部件以及AppWidget的创建详解
转载请注明出处:
今天给大家展现的如何创建一个窗口小部件(AppWidget)以及如何在自己的应用中添加窗口小部件(AppWidget)。
本文组织如下:
第一部分:创建一个窗口小部件;
第二部分:在自己的应用程序中添加窗口小部件(AppWidget)。
整个功能其实实现起来也是很简单的,只望大家能耐着性子点看 。
第一部分 、创建一个窗口小部件
网上资料已经许多了 ,在此先给大家推荐几个不错的Blog ,大家可以先去看看:
从中我们知道:
1、每个AppWidget都有一个AppWidgetProviderInfo对象,该对象描述了每个AppWidget的基本数据(meta-data)信息 ,
其定义在&appwidget-provider&节点信息。
2、每个AppWidget都对应一个RemoteViews视图对象,该RemoteViews提供了特定AppWidget的展示(View视图)和操作
(例如,点击该RemoteViews会跨进程处理一些事情)。
关于RemoteViews类请参考:
3、AppWidgetManager类维护了应用程序中所有的AppWidget,并且为给每个AppWidget特定的Id去标识他们(一般我们
用 appWidgetId去标识)。通过给定的appWidgetId,AppWidgetManager可以管理对应的AppWidget,例如:更新该
AppWidgetId的RemoteViews视图,删除该AppWidget对象等 。
4、AppWidgetProvider广播类从来说是一个监听器,系统把对AppWidget的操作(例如,创建和更新等)分发给
AppWidgetProvider类去处理。
对每个AppWidget,我们可以创建多个其多个实例,当然这些实例对应于不同的appWidgetId。 假设存在这么个
MyAppWidgetProvider广播类,以及对应的MyAppWidgetProviderInfo对象。 那么,则存在如下关系:
MyAppWidgetProvider.class : 代表了由该MyAppWidgetProvider创建的窗口小部件(AppWidget)的类型,一般用
CompontentName对象形式表示 。 那么存在如下关系:
从上图可是,每个appWidget都对应于一个MyAppWidgetProvider类,于是当任何一个appWidgetId发生变化时,我们需要
同步其他实例,保持同步性。
AppWidgetProviderInfo类补充说明:
publicconfigure: 一般为一个Activity,表明该Activity复杂需要管理AppWidget的创建操作。
public int updatePeriodMillis:用来更新AppWidget,但该属性在SDK1.5已废除
AppWidgetProvider类介绍:
常用方法:
: 当该类型的AppWidget每次被删除时,调用此方法
() : 当该类型的窗口小部件(AppWidget)全被删除时,调用此方法
() : 当第一次创建该类型的AppWidget时,调用此方法
() : 广播接受者方法
, 用来接受广播消息
: 每次创建该类型的AppWidget都会调用此方法 , 通常来说我们需要在该方法里为该AppWidget指定
RemoteViews对象。
AppWidgetManager类介绍:
常用常量:
ACTION_APPWIDGET_PICK= "android.appwidget.action.APPWIDGET_PICK“
说明:列出所有能够创建AppWidget的对象,该对象一般为自定义的AppWidgetProvider广播接受者。
注意:发送该Intent必须添加附加值: 。
该含义:该appWidgetId与我们发送Action为ACTION_APPWIDGET_PICK 后
所选择的AppWidget绑定。因此,我们可以通过这个appWidgetId获取该AppWidget的信息了。
ACTION_APPWIDGET_CONFIGURE= "android.appwidget.action.APPWIDGET_CONFIGURE”
说明: 如果选择的AppWidget配置了android:configure 属性,需要再次启动性对应的Activity,继而进一步去选择
AppWidget。同时发送该Intent必须添加附加值:,含义同上。
常用方法:
public int[]
getAppWidgetIds( provider)
功能:获取对应类型的所有appWidgetId
参数说明:
通常为 XXXAppProvider.class类型
getAppWidgetInfo(int appWidgetId)
功能: 获取特定appWidgetId对应的对象
public static
getInstance(context)
功能: 获取 对象
public void updateAppWidget(int appWidgetId,
功能: 以特定的views视图更新appWidgetId的窗口小部件(AppWidget) 。同时会发送广播
public void
updateAppWidget(int[] appWidgetIds, views)
功能:以特定的views视图更新所有appWidgetIds的窗口小部件(AppWidget),同时发送
public void
updateAppWidget( provider,
功能: 已特定的views更新组件类型为provider的所有窗口小部件(AppWidget),同时发送
示例Demo :
说明:创建一个简单的AppWidget实例,点击按钮后可以更该图片资源显示 ,具体在
关于如何创建一个AppWidget的教材,我也不再多说了,大家可以参考上面我提到的两篇重量级博客去学习:
PS: 具体代码可在后面下载 。
再次强调一点,每个AppWidget都对应与AppWidgetProvider , 我们需要同步更新这些AppWidget对象。
第二部分:在自己的应用程序中添加窗口小部件(AppWidget)
本部分的主要功能是像Launchcer那样添加AppWidget 。 知识点介绍如下:
1、AppWidgetHost 类
功能:对每个应用程序App,该类提供了和AppWidgetService(该AppWidgetService用来管理所有AppWidget,类似于
NotificationManagerService系统服务管理所有Notifciation,不懂?其实我也不懂,知其大意即可)交互,用来更新、管理
AppWidget。打个比喻:AppWidgetHost是宿主对象,每个AppWidget都是寄生虫,可以附加在(显示)AppWidgetHost上。
每个能添加、显示AppWidget的Activity都是一个AppWidgetHost对象,比如Launcher.java(Activity对象),以及我们后面自定
义的MainActivity.java(Activity对象)。
常用方法为:
public AppWidgetHost( context, int hostId)
功能:构造一个AppWidgetHost对象
大意是该AppWidgetHost(宿主对象)对应的Id号,一般赋予一整数即可。
public int allocateAppWidgetId()
功能:申请一个新的appWidgetId ,该id会与新创建的AppWidget绑定。
public void startListening()
功能:监听所有AppWidget的变化 ,该方法必须在Activity的onCreate()/onStart()调用,否则 AppWidget是不会得到更新的
public void stopListening()
功能: 对应于startListening(),即停止对AppWidget的更新监听。可以在Activity的onStop()方法里调用 ,
一般无需调用此方法去停止监听。
public final
createView( context, int appWidgetId,
appWidget)
功能: 根据指定的appWidgetId以及对象去构建一个对象(具体该对象,
参见下 文)。
与 RemoteViews的区别
对每个AppWidget内部而言,都有一个RemoteViews对象,用于视图显示;而对于外部而已,则以
形式代言 这个RemoteViews视图。换句话来说就是,AppWidgetHost对象而言,它并不知道RemoteViews存在,而只是知
RemoteViews 的代言人AppWidgetHostView。
好了 ,该说明的都说明了,下面最后给大家补充一下如何利用在自己的应用程序里添加窗口小部件(AppWidget) 。
也是两步走:
发送Action为的 Intent ,则所有能创建窗口小部件的AppWidgetProvider的广播
接收者都会显示 ,同时为该新创建的AppWidget分配一个appWidgetId ,该appWidgetId即可唯一标记我们选择的
AppWidget。
第二步:如果选择的AppWidget对应地AppWidgetProviderInfo对象配置了android:configure属性,则需要在此启动该配置
属性(一般为一个Activity类) ,然后在完成添加AppWidget的操作 ; 否则,没有配置android:configure属性,就可以添加
AppWidget的操作。
示例Demo截图:
主工程流程如下:
package com.qin.
import android.app.A
import android.appwidget.AppWidgetH
import android.appwidget.AppWidgetHostV
import android.appwidget.AppWidgetM
import android.appwidget.AppWidgetProviderI
import android.content.I
import android.os.B
import android.util.L
import android.view.V
import android.widget.B
import android.widget.ImageV
import android.widget.LinearL
import android.widget.TextV
import android.widget.T
public class MainActivity extends Activity
private static String TAG = "AddAppWidget" ;
private Button btAddShortC
private LinearLayout linearL
private static final int MY_REQUEST_APPWIDGET = 1;
private static final int MY_CREATE_APPWIDGET = 2;
private static final int HOST_ID = 1024 ;
private AppWidgetHost
mAppWidgetHost = null ;
AppWidgetManager appWidgetManager = null;
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btAddShortCut = (Button) findViewById(R.id.bt_addShortcut);
linearLayout = (LinearLayout)findViewById(R.id.linearLayout) ;
mAppWidgetHost = new AppWidgetHost(MainActivity.this, HOST_ID) ;
mAppWidgetHost.startListening() ;
appWidgetManager = AppWidgetManager.getInstance(MainActivity.this) ;
btAddShortCut.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK) ;
int newAppWidgetId = mAppWidgetHost.allocateAppWidgetId() ;
Log.i(TAG, "The new allocate appWidgetId is ----& " + newAppWidgetId) ;
pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, newAppWidgetId) ;
startActivityForResult(pickIntent , MY_REQUEST_APPWIDGET) ;
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if(resultCode == RESULT_CANCELED)
switch(requestCode){
case MY_REQUEST_APPWIDGET :
Log.i(TAG, "MY_REQUEST_APPWIDGET intent info is -----& "+data ) ;
int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID , AppWidgetManager.INVALID_APPWIDGET_ID) ;
Log.i(TAG, "MY_REQUEST_APPWIDGET : appWidgetId is ----& " + appWidgetId) ;
if(appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID){
AppWidgetProviderInfo appWidgetProviderInfo = appWidgetManager.getAppWidgetInfo(appWidgetId) ;
if(appWidgetProviderInfo.configure != null){
Log.i(TAG, "The AppWidgetProviderInfo configure info -----& " + appWidgetProviderInfo.configure ) ;
Intent intent
= new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE) ;
intent.setComponent(appWidgetProviderInfo.configure) ;
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
startActivityForResult(intent , MY_CREATE_APPWIDGET) ;
onActivityResult(MY_CREATE_APPWIDGET , RESULT_OK , data) ;
MY_CREATE_APPWIDGET:
completeAddAppWidget(data) ;
private void completeAddAppWidget(Intent data){
Bundle extra = data.getExtras() ;
int appWidgetId = extra.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID , -1) ;
Log.i(TAG, "completeAddAppWidget : appWidgetId is ----& " + appWidgetId) ;
if(appWidgetId == -1){
Toast.makeText(MainActivity.this, "添加窗口小部件有误", Toast.LENGTH_SHORT) ;
AppWidgetProviderInfo appWidgetProviderInfo = appWidgetManager.getAppWidgetInfo(appWidgetId) ;
AppWidgetHostView hostView = mAppWidgetHost.createView(MainActivity.this, appWidgetId, appWidgetProviderInfo);
int widget_minWidht = appWidgetProviderInfo.minW
int widget_minHeight = appWidgetProviderInfo.minH
LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(widget_minWidht, widget_minHeight);
linearLayout.addView(hostView,linearLayoutParams) ;
最后 ,关于AppWidget点击后触发的相应事件,是通过设置该AppWidget的RemoteViews的某个控件点击事件而触发的。
示例DEMO下载地址:
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 miui7 窗口小部件 的文章

 

随机推荐