Android-Widget桌面应用小部件

官方文档中国版: https://developer.android.google.cn/guide/topics/appwidgets/index.html
这个网站是谷歌2016年底为中国开发者提供中国版,方便访问!

一.介绍

Android Widget是桌面应用小部件,可嵌入桌面,并可周期性更新Widget界面!     
例如在桌面的天气,日历类小工具就是Widget部件!

二.创建Widget广播接收器


public class ExampleAppWidgetProvider extends AppWidgetProvider {
    // onEnabled(Context)         widget可用触发
    // onDisabled(Context)        widget不可用触发
    // onDeleted(Context, int[])  widget被删除触发

    // widget更新触发
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
        final int N = appWidgetIds.length;  
        // Perform this loop procedure for each App Widget that belongs to this provider  
        for (int i=0; i<N; i++) {  
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity  
            Intent intent = new Intent(context, ExampleActivity.class);  
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            // Get the layout for the App Widget and attach an on-click listener  
            // to the button  
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);  
            views.setOnClickPendingIntent(R.id.button, pendingIntent);  

            // Tell the AppWidgetManager to perform an update on the current app widget  
            appWidgetManager.updateAppWidget(appWidgetId, views);  
        }  
    }

    @Override  
    public void onReceive(Context context, Intent intent) {  
        AppWidgetManager mgr = AppWidgetManager.getInstance(context);  
        if (intent.getAction().equals(TOAST_ACTION)) {  
            int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,  
                AppWidgetManager.INVALID_APPWIDGET_ID);  
            int viewIndex = intent.getIntExtra(EXTRA_ITEM, 0);  
            Toast.makeText(context, "Touched view " + viewIndex, Toast.LENGTH_SHORT).show();  
        }  
        super.onReceive(context, intent);       
        // Intent意图:
        // ACTION_APPWIDGET_UPDATE //处理更新
        // ACTION_APPWIDGET_DELETED // 处理删除
        // ACTION_APPWIDGET_ENABLED //可用
        // ACTION_APPWIDGET_DISABLED //不可用
        // ACTION_APPWIDGET_OPTIONS_CHANGED // 配置改变
    }
}

三.创建Widget基本信息(如布局等)

1.在AndroidManifest.xml中
<receiver android:name="ExampleAppWidgetProvider" >  
    <intent-filter>  
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />  
    </intent-filter>  
    <meta-data android:name="android.appwidget.provider"  
               android:resource="@xml/widget_info" /> xml定义Widget基本信息(如布局等)
</receiver>

2.在res/xml/widget_info.xml中
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    android:minWidth="40dp"  
    android:minHeight="40dp"  
    android:updatePeriodMillis="86400000"  设置widget更新周期, 周期发广播调用AppWidgetProvider.onUpdate()
    android:previewImage="@drawable/preview"  设置widget预览图标,如不设置,默认是APP图标
    android:initialLayout="@layout/example_appwidget"  设置Widget布局界面
    android:configure="com.example.android.ExampleAppWidgetConfigure"   
    android:resizeMode="horizontal|vertical"  设置一个部件resizeable水平方向和垂直方向
    android:widgetCategory="home_screen|keyguard"  决定widget是否可以显示在主屏幕,锁屏
    android:initialKeyguardLayout="@layout/example_keyguard">  定义锁屏应用小部件的布局
</appwidget-provider>

3.widget布局xml
<FrameLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:padding="@dimen/widget_margin">
    .........
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@drawable/my_widget_background">
    ........
  </LinearLayout>
</FrameLayout>

简书: http://www.jianshu.com/p/c997b9040401
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/71598901
GitHub博客:http://lioil.win/2017/05/10/Android_Widget.html
Coding博客:http://c.lioil.win/2017/05/10/Android_Widget.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值