美文网首页Widget
Android-Widget桌面应用小部件

Android-Widget桌面应用小部件

作者: lioilwin | 来源:发表于2017-08-27 16:15 被阅读302次

    官方文档中国版: 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

    相关文章

      网友评论

        本文标题:Android-Widget桌面应用小部件

        本文链接:https://www.haomeiwen.com/subject/qjtidxtx.html