Widget创建方法

1.在清单文件中声明Widget,由于widget是基于广播的所以标签名为receiver:
             <receiver android :name = "com.example.mobilesafe.widget.ClearWidget"  >
             <intent -filter >
                 <action android :name = "android.appwidget.action.APPWIDGET_UPDATE"  / >
             < /intent -filter >
             <meta -data
                android :name = "android.appwidget.provider"
                 android:resource="@xml/clear_widget" />
              < / receiver >
2.在res/xml文件夹下创建一个xml文件,用来定义widget的一些特性:
<?xml version= "1.0" encoding= "utf-8"?>
<appwidget-provider xmlns:android= "http://schemas.android.com/apk/res/android"
    android:minWidth= "294dp"
    android:minHeight= "72dp"
    android:updatePeriodMillis= "0"
    android:initialLayout= "@layout/process_widget"
    android:resizeMode= "horizontal|vertical">
</appwidget-provider>

<!-- minWidth 最小的宽度 
    minHeight 最小的高度
    updatePeriodMillis 更新间隔时间  要求不能小于30分钟    15分钟
    previewImage  预览的图标   没有默认采用程序的图标
    initialLayout  布局
    resizeMode  压缩方式 
-->

3.写一个widget的布局文件,注意:widget只支持一些特定的控件,当布局中有不支持的控件时,widget无法正确显示在界面上.
<?xml version= "1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
    android:layout_width= "fill_parent"
    android:layout_height= "wrap_content"
    android: background= "@drawable/widget_bg_portrait"
    android:gravity= "center_vertical" >
    <LinearLayout
        android:layout_width= "0.0dip"
        android:layout_height= "fill_parent"
        android:layout_marginLeft= "5.0dip"
        android:layout_weight= "1.0"
        android: background= "@drawable/widget_bg_portrait_child"
        android:gravity= "center_vertical"
        android:orientation= "vertical"
        android:paddingBottom= "3.0dip"
        android:paddingTop= "3.0dip" >
        <TextView
            android: id= "@+id/tv_clear_process_count"
            android:layout_width= "wrap_content"
            android:layout_height= "wrap_content"
            android:layout_marginLeft= "10.0dip"
            android:singleLine= "true"
               android: text= "我是widget"
            android:textAppearance= "@style/widget_text" />
    </LinearLayout>
</LinearLayout>

4.创建一个类,继承AppWidgetProvider(这个类就是Widget):

public  class ExampleAppWidgetProvider  extends AppWidgetProvider {

     public  void onUpdate(Context context, AppWidgetManager appWidgetManager,  int[] appWidgetIds) {
           //以下代码是用来给widget绑定事件的,可以不写.
          final   int  N  =  appWidgetIds.length;
        
         // 为每一个widget执行这个循环,通过PendingIntent给widget绑定延期意图点击事件
         for ( int i = 0; i <N; i ++) {
             int appWidgetId  = appWidgetIds[i];

             //创建一个intent用来加载一个activity.
            Intent intent  =  new Intent(context, ExampleActivity. class);
            PendingIntent pendingIntent  = PendingIntent.getActivity(context,  0, intent,  0);

             // 得到widget的布局给他绑定一个点击事件到它的按钮上.
            RemoteViews views  =  new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
            views.setOnClickPendingIntent(R.id.button, pendingIntent);

             // 告诉AppWidgetManager来更新当前的widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}

5.widget默认最低刷新间隔为30分钟,如果想要提高刷新速率,可以写一个service来不断的刷新widget的界面.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值