精华内容
下载资源
问答
  • AppWidget使用方法

    2019-09-22 23:21:05
    手机桌面小组件 ...public class AppWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d("My...

    手机桌面小组件

    public class AppWidget extends AppWidgetProvider {
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            Log.d("MyAppWidgetProvider", "调用了onUpdate方法");
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.remoteview);
            remoteViews.setImageViewResource(R.id.image, R.drawable.ic2);
            remoteViews.setTextViewText(R.id.text, "我是桌面小组件");
            remoteViews.setOnClickPendingIntent(R.id.image, pendingIntent);
            appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);//用updateAppWidget来更新remoteViews的状态
        }
    
    }

    定义一个类继承AppWidgetProvider重写onupdate方法

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="200dp" />
        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    自定义布局文件remoteView

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/remoteview"
        android:minWidth="100dp"
        android:minHeight="100dp"
        android:updatePeriodMillis="86400000">
    
    </appwidget-provider>

    xml文件appwidget

      <receiver android:name=".AppWidget">
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/appwidget"/>
                <!--name的值是固定的,只能是android.appwidget.provider-->
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/><!--必须得有这个action-->
                </intent-filter>
            </receiver>

    配置文件声明appwidget,运行后手机添加桌面小组件,点击图片会进入Pendingintent的activity

    转载于:https://www.cnblogs.com/Ocean123123/p/11040236.html

    展开全文
  • 一、创建AppWidget的布局文件,名称为appwidget_layout.xml   &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="...ve...

    一、创建AppWidget的布局文件,名称为appwidget_layout.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"
        >
    <Button 
    	android:id="@+id/button1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="测试"
        />
    </LinearLayout>
    

     

    二、创建appwidgetprovider,先在res文件夹下创建xml文件夹,同时在xml文件夹下创建appwidget_info.xml

     

    <appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="294dp"
        android:minHeight="72dp"
        android:updatePeriodMillis="600000"
        android:initialLayout="@layout/appwidget_layout"
       >
    </appwidget-provider>
     

    三、在AndroidManifest.xml中添加如下信息

     

    <receiver android:name="cn.edu.appwidget.MyAppWidgetProvider">
    		<intent-filter>
    			<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    		</intent-filter>
    		<meta-data
    		 android:name="android.appwidget.provider"
    		 android:resource="@xml/appwidget_info"
    		/>
    	</receiver>
     

    四、继承AppWidgetProvider

     

    package cn.edu.appwidget;
    
    import android.app.PendingIntent;
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.RemoteViews;
    import cn.edu.design.AppWidget_01Activity;
    
    import cn.edu.design.R;
    public class MyAppWidgetProvider extends AppWidgetProvider{
    
    	@Override
    	public void onDeleted(Context context, int[] appWidgetIds) {
    		// TODO Auto-generated method stub
    
    		super.onDeleted(context, appWidgetIds);
    	}
    
    	@Override
    	public void onDisabled(Context context) {
    		// TODO Auto-generated method stub
    		super.onDisabled(context);
    		
    	}
    
    	@Override
    	public void onEnabled(Context context) {
    		// TODO Auto-generated method stub
    		super.onEnabled(context);
    		
    	}
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		// TODO Auto-generated method stub
    		super.onReceive(context, intent);
    		
    	}
    
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    			int[] appWidgetIds) {
    		System.out.println("update");
    		for(int i=0;i<appWidgetIds.length;i++){
    			Intent intent=new Intent(context,AppWidget_01Activity.class);
    			PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, intent, 0);
    			RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);
    			remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent);
    			appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
    			
    		}
    		
    		
    		// TODO Auto-generated method stub
    		super.onUpdate(context, appWidgetManager, appWidgetIds);
    	}
    
    }
    
     

    五、处理广播信息

     

    1、其他步骤和上面的方法相同,将AndroidManifest.xml修改为

     

    <receiver android:name="cn.edu.appwidget.MyAppWidgetProvider_01">
    		<intent-filter>
    			<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    		</intent-filter>
    		<intent-filter >
    			<action android:name="cn.edu.myaction"/> <!--cn.edu.myaction是自己定义的字符串-->
    		</intent-filter>
    		<meta-data
    		 android:name="android.appwidget.provider"
    		 android:resource="@xml/appwidget_info"
    		/>
    	</receiver>

     

    2、在继承AppWidgetProvider的类中

     

    public class MyAppWidgetProvider_01 extends AppWidgetProvider{
      //自己定义字符串,在Intent的Action中使用
      private final static String MY_ACTION="cn.edu.myaction";
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		// TODO Auto-generated method stub
    		super.onReceive(context, intent);
    		if(intent.getAction().equals(MY_ACTION)){
    			System.out.println("execute broadcast");
    		}
    	}
    
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    			int[] appWidgetIds) {
    		// TODO Auto-generated method stub
    		
    		System.out.println("update");
    		for(int i=0;i<appWidgetIds.length;i++){
    			Intent intent=new Intent();
    			intent.setAction(MY_ACTION);
    //当执行pendingIntent的时候会产生一个广播消息
    			PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, 0);
    			RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);
    //为aawidget的布局文件中的按钮增加事件
    			remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent);
    			appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
    			
    		}
    		
    		super.onUpdate(context, appWidgetManager, appWidgetIds);
    	}
    
    }
     

     

     

     

     

     

    展开全文
  • Flutter自定义Widget使用方法

    千次阅读 2019-03-27 13:37:54
    前面已经通过三个篇幅向大家介绍了Flutter原生提供的常用Widget和其使用方法,实际开发中我们会遇到一些特殊的需求或者规范一些常用的Widget作为基础UI组件来使用,这时我们就需要根据需求自定义Widget了。...

    前言

    前面已经通过三个篇幅向大家介绍了Flutter原生提供的常用Widget和其使用方法,实际开发中我们会遇到一些特殊的需求或者规范一些常用的Widget作为基础UI组件来使用,这时我们就需要根据需求自定义Widget了。Flutter中的自定义Widget和安卓、iOS原生平台类似,可以使用现有Widget进行组合,也可以自己根据需求来绘制,下面分别对两种自定义Widget的实现和使用方法做详细介绍。

    现有Widget组合自定义Widget

    现有Widget组合即是根据前面所介绍的基础Widget根据需求来组合成一个通用的Widget,这样在使用过程中避免设置过多的属性,且增强其复用性。
    比如,在实际开发中,我们经常会碰到一个Icon和一个标题组合而成的UI,且这个组合的区块可以处理点击事件,那么我们就可以根据现有Icon和Text widget组合成通用的类似UI组件。

    首先创建一个单独的dart文件来实现该自定义Widget,比如命名为custom_combined_widget.dart

    import 'package:flutter/material.dart';
    
    class CustomCombinedWidget extends StatefulWidget {
    
      final IconData iconData;
      final String title;
      final GestureTapCallback onTap;
    
      const CustomCombinedWidget({Key key, this.iconData, this.title, this.onTap}): super(key: key);
    
      @override
      State<StatefulWidget> createState() {
        // TODO: implement createState
        return CustomCombinedWidgetState();
      }
    
    }
    
    class CustomCombinedWidgetState extends State<CustomCombinedWidget> {
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return GestureDetector(
          onTap: this.widget.onTap,
          child: Column(
            children: <Widget>[
              Icon(this.widget.iconData, size: 45.0,),
              Text(this.widget.title == null ? "" : this.widget.title, style: TextStyle(fontSize: 14.0, color: Colors.black),),
            ],
          ),
        );
      }
    
    }
    

    上述代码中我们自定义了一个CustomCombinedWidget,这里面Icon的大小和标题的文本大小、颜色都是定好的,所以在使用时无法改变这些值,如果想在使用过程中改变这些值则需要从外部传值进来,比如标题的文本内容、icon和该Widget点击事件回调就是通过外部使用者传入的。

    以上自定义Widget的使用方法如下:

    //首先导入自定义Widget所在文件
    import 'package:demo_module/custom_combined_widget.dart';
    
    //在页面Widget中使用
    
    class HomePageState extends State<HomePage> {
      String tips = '这里是提示';
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Scaffold(
          appBar: AppBar(
            title: Text('自定义组合Widget'),
          ),
          body: Container(
            child: buildCombinedWidget(),
          ),
        );
      }
    
      Widget buildCombinedWidget() {
        return Center(
          child: Column(
            children: <Widget>[
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  CustomCombinedWidget( //使用自定义Widget
                    iconData: Icons.home,
                    title: '首页',
                    onTap: () {
                      setState(() {
                        this.tips = '点击了首页';
                      });
                    },
                  ),
                  CustomCombinedWidget(
                    iconData: Icons.list,
                    title: '产品',
                    onTap: () {
                      setState(() {
                        this.tips = '点击了产品';
                      });
                    },
                  ),
                  CustomCombinedWidget(
                    iconData: Icons.more_horiz,
                    title: '更多',
                    onTap: () {
                      setState(() {
                        this.tips = '点击了更多';
                      });
                    },
                  ),
                ],
              ),
              Padding(
                padding: EdgeInsets.only(top: 50),
                child: Text(
                  this.tips,
                  style: TextStyle(fontSize: 20, color: Colors.blue),
                ),
              ),
            ],
          ),
        );
      }
    } 
    

    以上代码模拟器运行效果如下:

    通过CustomPainter绘制自定义Widget

    自定义绘制的Widget需要我们继承官方提供的CustomPainter抽象类,重写paint方法来实现,我们可以在paint方法中根据需求来绘制各种UI图形,最后根据该自定义CustomerPainter类创建一个painter对象作为系统提供的CustomPaint的painter属性值来实现自定义Widget。下面根据一个常用的柱状图的实现来学习CustomPainter的用法。

    首先我们创建一个自定义Widget对应的dart文件my_custom_painter.dart

    import 'dart:ui';
    import 'dart:ui' as ui show TextStyle;
    
    import 'package:flutter/material.dart';
    
    class BaseData {
      String name;
      int num;
      BaseData({this.name, this.num});
    }
    
    class MyCustomPainter extends CustomPainter {
      //绘制区域宽度
      final int width = 300;
      //绘制区域高度
      final int height = 350;
      //坐标原点
      final Offset origin = const Offset(50.0, 280.0);
      //纵坐标顶点
      final Offset vertexVer = const Offset(50.0, 20.0);
      //横坐标顶点
      final Offset vertexHor = const Offset(300.0, 280.0);
      //纵坐标刻度间隔
      final int scaleInterval = 1000;
      const MyCustomPainter(this.data);
      final List<BaseData> data;
    
      //根据文本内容和字体大小等构建一段文本
      Paragraph buildParagraph(String text, double textSize, double constWidth) {
        ParagraphBuilder builder = ParagraphBuilder(
          ParagraphStyle(
            textAlign: TextAlign.right,
            fontSize: textSize,
            fontWeight: FontWeight.normal,
          ),
        );
        builder.pushStyle(ui.TextStyle(color: Colors.black));
        builder.addText(text);
        ParagraphConstraints constraints = ParagraphConstraints(width: constWidth);
        return builder.build()..layout(constraints);
      }
    
      @override
      void paint(Canvas canvas, Size size) {
        // TODO: implement paint
        var paint = Paint()
          ..color = Colors.black
          ..strokeWidth = 2.0
          ..strokeCap = StrokeCap.square;
    
        //绘制纵坐标轴线
        canvas.drawLine(origin, vertexVer, paint);
        canvas.drawLine(
            vertexVer, Offset(vertexVer.dx - 5, vertexVer.dy + 10), paint);
        canvas.drawLine(
            vertexVer, Offset(vertexVer.dx + 5, vertexVer.dy + 10), paint);
        canvas.drawParagraph(buildParagraph('印刷量', 14, origin.dx-5),
            Offset(0, vertexVer.dy-8));
    
        //绘制横坐标轴线
        canvas.drawLine(origin, vertexHor, paint);
        canvas.drawLine(
            vertexHor, Offset(vertexHor.dx - 10, vertexHor.dy - 5), paint);
        canvas.drawLine(
            vertexHor, Offset(vertexHor.dx - 10, vertexHor.dy + 5), paint);
        canvas.drawParagraph(buildParagraph('书籍名', 14, origin.dx-5),
            Offset(vertexHor.dx, origin.dy+8));
    
        //绘制纵坐标刻度
        //实际最大值
        double realMaxY = origin.dy - vertexVer.dy - 20;
        //刻度间隔实际值
        double scaleInte = realMaxY / 5;
        for (int i = 0; i < 5; i++) {
          canvas.drawLine(Offset(origin.dx, origin.dy - (i + 1) * scaleInte),
              Offset(origin.dx + 5, origin.dy - (i + 1) * scaleInte), paint);
          canvas.drawParagraph(buildParagraph(((i+1)*scaleInterval).toString(), 12, origin.dx-5),
              Offset(0, origin.dy - (i + 1) * scaleInte - 8.0));
        }
    
        if (data == null || data.length == 0) {
          return;
        }
        //计算纵坐标上的刻度
        int size = data.length;
        //柱状图间隔值
        double horiScalInte = (vertexHor.dx - origin.dx - 20) / size;
        //柱状图宽
        double chartWidth = 5;
        for (int i = 0; i < size; i++) {
          BaseData curData = data[i];
          double valueY = curData.num * scaleInte / scaleInterval;
          canvas.drawRect(Rect.fromLTWH(origin.dx + (i+1)*horiScalInte, origin.dy - valueY, chartWidth, valueY), paint);
          canvas.drawParagraph(buildParagraph(curData.name, 12, origin.dx-5),
              Offset(origin.dx + (i+1) * horiScalInte - 25, origin.dy+8));
        }
      }
    
      @override
      bool shouldRepaint(MyCustomPainter oldDelegate) {
        // TODO: implement shouldRepaint
        return oldDelegate.data != data;
      }
    }
    

    代码实现中表示我们将传入一个包含柱状图数据的data对象,paint方法会根据data数据集合来在一个坐标系中绘制柱状图。在具体的Widget页面应用方法如下:

    class HomePageState extends State<HomePage> {
      List<BaseData> data = List();
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Scaffold(
          appBar: AppBar(
            title: Text('自定义绘制Widget'),
          ),
          body: Container(
            child: buildDemoPaintWidget(),
          ),
        );
      }
    
      Widget buildDemoPaintWidget() {
        return Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Container(
              height: 350,
              child: buildPaintWidget(),
            ),
            Container(
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  MaterialButton(
                    onPressed: () {
                      BaseData book1 = BaseData(name: '书籍A', num: 5000);
                      BaseData book2 = BaseData(name: '书籍B', num: 2000);
                      BaseData book3 = BaseData(name: '书籍C', num: 3000);
                      List<BaseData> dataList = List();
                      dataList.add(book1);
                      dataList.add(book2);
                      dataList.add(book3);
                      setState(() {
                        this.data = dataList;
                      });
                    },
                    child: Text('三本书'),
                  ),
                  MaterialButton(
                    onPressed: () {
                      BaseData book4 = BaseData(name: '书籍D', num: 4500);
                      setState(() {
                        this.data.add(book4);
                      });
                    },
                    child: Text('四本书'),
                  ),
                  MaterialButton(
                    onPressed: () {
                      BaseData book5 = BaseData(name: '书籍E', num: 2500);
                      setState(() {
                        this.data.add(book5);
                      });
                    },
                    child: Text('五本书'),
                  ),
                ],
              ),
            ),
          ],
        );
      }
    
      //构建自定义绘制的Widget
      Widget buildPaintWidget() {
        return CustomPaint(
          painter: MyCustomPainter(data),
        );
      }
    }
    

    以上代码,初始时data数据为空,通过点击三个按钮来改变data的值从而重新绘制柱状图,具体效果如下:

    总结

    本篇我们对自定义Widget进行了详细介绍,实际开发中无非就是使用者两种方式来实现五花八门的UI需求,其中绘制自定义Widget在图表较多的APP中会经常使用,后续我们会专门用一篇文章来介绍各种图形的绘制方法,敬请期待!

    说明:

    文章转载自对应的“Flutter编程指南”微信公众号,更多Flutter相关技术文章打开微信扫描二维码关注微信公众号获取。

    展开全文
  • 主要介绍了Android编程Widget创建与使用方法,结合实例形式分析了Widget的功能、使用方法与相关注意事项,需要的朋友可以参考下
  • widget的基本使用方法

    2016-10-14 09:05:00
    一、widget桌面的小挂件,外面可以用app widget制作自己的小挂件。制作挂件的过程:、 1、android studio下在res目录下点击右键,选择new->widget->app widget 创建一个app wiget后会让你创建app wiget类  ...

    一、widget桌面的小挂件,外面可以用app widget制作自己的小挂件。制作挂件的过程:、

    1、android studio下在res目录下点击右键,选择new->widget->app widget 创建一个app wiget后会让你创建app wiget类

      <1> 自动的在src文件下创建xml文件夹,该文件夹下会有你刚创建的widget的xml文件

      <2> 自动在layout目录下创建相应的布局文件,该布局文件提供给widget使用,它是桌面上显示的小挂件的布局文件

      <3> 在包名下面自动创建相应的widget类,NewAppWidget 类是一个广播接收者

      <4> 在mainfest文件下会自动创建widgetUpdate的一个广播接收者。

    下面是创建了newAppWidget后的目录:

    new_app_widget_info.xml是创建的wiget的配置:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialKeyguardLayout="@layout/new_app_widget"
        android:initialLayout="@layout/new_app_widget"
        android:minHeight="30dp"
        android:minWidth="180dp"
        android:previewImage="@drawable/example_appwidget_preview"
        android:resizeMode="horizontal|vertical"
        android:updatePeriodMillis="1000"
        android:widgetCategory="home_screen"></appwidget-provider>
    

      Notice:updateperiodMillis是挂件更新的时间,系统为了节约资源规定设置大于30分钟才有效,小于30分钟还是30分钟更新一次。

    new_app_widget.xml是挂件的布局文件:就是说小挂件只是个TextView的控件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#09C"
        android:padding="@dimen/widget_margin">
    
        <TextView
            android:id="@+id/appwidget_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_margin="8dp"
            android:background="#09C"
            android:contentDescription="@string/appwidget_text"
            android:text="ca"
            android:textColor="#ffffff"
            android:textSize="20dp"
            android:textStyle="bold|italic" />
    
    </RelativeLayout>
    

    NewAppWidget.class就是Mainfest文件中静态注册的监听器的实现,里面如下:其中方法调用的时间见代码中备注

    package com.example.user.appwidget;
    
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.widget.RemoteViews;
    import android.widget.TextView;
    
    import java.util.Calendar;
    
    /**
     * Implementation of App Widget functionality.
     */
    public class NewAppWidget extends AppWidgetProvider {
    
        static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                    int appWidgetId) {
    
            Calendar c = Calendar.getInstance();
            int hour = c.get(Calendar.HOUR_OF_DAY);
            int minute = c.get(Calendar.MINUTE);
            int seconds = c.get(Calendar.SECOND);
            CharSequence widgetText = "Time:"+hour+":"+minute+":"+seconds;//context.getString(R.string.appwidget_text);
            // Construct the RemoteViews object
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
            views.setTextViewText(R.id.appwidget_text, widgetText);
            // Instruct the widget manager to update the widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    
        // 到达指定更新时间(new_app_widget_info.xml中指定的,大于30分钟才有效,小于30分钟会30分钟执行一次)
        // 或者向桌面添加Widget时候执行
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            // There may be multiple widgets active, so update all of them
            for (int appWidgetId : appWidgetIds) {
                updateAppWidget(context, appWidgetManager, appWidgetId);
            }
        }
    
        //当第一个widget创建时候执行
        @Override
        public void onEnabled(Context context) {
            // Enter relevant functionality for when the first widget is created
        }
    
        //当最后一个widget实例被删除时执行
        @Override
        public void onDisabled(Context context) {
            // Enter relevant functionality for when the last widget is disabled
        }
    }
    

      Mainfest中静态注册广播接受者:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.user.appwidget">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <receiver android:name=".NewAppWidget">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
    
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/new_app_widget_info" />
            </receiver>
        </application>
    
    </manifest>
    

      Notice:如果用的是Eclipse可能就要自己手动在相应的地方创建文件,这也是android studio优于eclipse的地方。

      

     

    转载于:https://www.cnblogs.com/bokeofzp/p/5959051.html

    展开全文
  • 1、基本使用方法 (1)在AndroidManifest.xml中声明: widget本质是广播接收器,广播是四大组件之一,需要在AndroidManifest中声明: <receiver android:name=".TestWidget"> <intent-filter> <...
  • appwidget 我所理解的意思就是一个在桌面上添加一个小的应用程序,然后不断的进行更新。 在里面添加一个基本的按钮进行监听事件。具体代码如下: 直接创建就可以完成,而且在 Androidfest中直接就能注册  ...
  • Widget小部件的使用方法介绍 TP5

    千次阅读 2018-02-24 10:43:54
    现在Widget叫分层控制器了,很官方了,熟悉YII框架的朋友都习惯叫它小部件,我也是一直叫它小部件,它真的是非常好用的一个东西,今天就简单的分享一下它的使用方法吧。Thinkphp3.2版本使用方法从这进入:...
  • QT GUI Tab Widget的设置: 其中 ID改为自己想改的,这里我写的是display GUI Hint所代表的意思为:[行,列,行间距,列间距] GUI hint参数可以用来指定图像的位置,其为[行,列,...
  • 前言前面已经通过三个篇幅向大家介绍了Flutter原生提供的常用Widget和其使用方法,实际开发中我们会遇到一些特殊的需求或者规范一些常用的Widget作为基础UI组件来使用,这时我们就需要根据需求自定义Widget了。...
  • 1.这是继承AppwidgetProvider的类,主要包含5个主要方法。 View Code package Wang.appwidget;import android.app.Activity;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;...
  • 最近在做widget使用AppWidgetManager的getAppWidgetIds(ComponentName provider)方法返回widget实例时发现总是返回空数组,最后发现问题在于ComponentName的构造方法需要使用:new ComponentName(context, ...
  • RecyclerView Widget 使用

    2019-05-17 06:00:52
    # recyclerView 使用场景: 加载列表 多类型 Item 适配加载列表 header footer 适配加载列表 上拉加载更多 下拉刷新 分组 列表 分组 悬浮列表 拖拽排序 侧滑 展开Menu 菜单 加载列表 /** * RecyclerView.Adapter&...
  • thinkphp之Widget使用

    2019-10-03 17:39:31
    首先继承Widget类,然后使用rander方法调用所需的数据通过renderFile方法把数据返回到Action中 即可自定义标签模块 在模板中调用使用 {:W('ShowComment',array('count'=>5))} 数组也可以改成字符串传入然后...
  • thinkPHP下的widget挂件原理与使用方法

    千次阅读 2014-08-01 16:06:31
    当我们在多个视图页面中用到同一段动态的代码块时,我们就有必要用到thinkphp的widget扩展...需求:写一个供页面使用的主题widget,及多个页面要从数据库中提取所有主题并以列表的模式罗列在页面中,实现以主题筛选的功
  • 使用 Flutter 开发的过程中,有时候现有的 Widget 不能满足需求,所以需要自定义 Widget,有点像 Android 和 iOS 平台的自定义 View,来实现我们的各种效果。Flutter 也是支持自定义 Widget 组件的,原理和方法...
  • 最近需要用到Tree Widget树形控件,现将自己的一些理解记录下来。 Tree Widget在项目控件组(Item Widgets)里面可以找到。这种控件其实有时还是很有用处的,我主要利用的是带有复选框的树形控件。结果如图所示; ...
  • Tabel Widget使用

    2014-08-27 22:08:07
    由于项目需要在对话框里添加列表框,所以今天学习了一下Qt的 TableWidget控件的相关使用方法,新手上路,编程语句不是最好的,只能实现一定的功能而已。  作为演示,我们这次要实现的功能是在对话框中添加一个5...
  • What is App Widget? 在手机桌面上放置的控件,即Android的桌面组件 AppWidgetProviderInfo public class AppWidgetProviderInfo extends Object implements Parcelable Describes the meta data for...
  • QT Widget控件使用

    2020-04-26 10:58:57
    Widget控件可以通过设计界面添加 1. Widget中添加Layout方法: ui->widget->setLayout(baseLayout); 2. Widget中删除Layout方法: delete layout;
  • 使用Ext.widget()方法时弹出以下提示信息 ext-all.js:15 Uncaught TypeError: Cannot read property ‘substring’ of undefined 首先,widget()方法是用来创建类的实例的,传入的参数是该类的别名, 既然是类的...
  • 文章目录1.Flutter 自定义 Widget 的方式2 Widget 的继承实现自定义3.Widget 的组合实现自定义4.CustomPaint 绘制 Widget5.Flutter方法的封装 在使用 Flutter 开发的过程中,有时候现有的 Widget 不能满足需求,所以...
  • 方法添加的控件目前来看是剧中显示,意思是如果layout不够大,显示的部分将是widget中间的部分 2、使用desginer在ui上添加一个widgetA,用于放置需要存放的widget,创建widgetB的时候,指定widgetA为parent,这样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,065
精华内容 826
关键字:

widget使用方法