Android Application Development (10): Use of widgets and androidwidgets
1. Custom widgets must inherit the AppWidgetProvider
Source code: http://www.jinhusns.com/Products/Download? Type = xcj
2. AndroidManifest. xml must be registered
<Cycler android: name = ". widget. AppWidget">
<Meta-data
Android: name = "android. appwidget. provider"
Android: resource = "@ xml/guide_widget"/>
<Intent-filter>
<Action android: name = "android. appwidget. action. APPWIDGET_UPDATE"/>
</Intent-filter>
</Cycler>
(1) the consumer er name must be the custom widget class name.
(2) the meta-data name must be android. appwidget. provider.
(3) the resource of meta-data is the description file of the widget, which must be placed in the res/xml Path.
(4) You need to add action to add the listener handler type android. appwidget. action. APPWIDGET_UPDATE.
3. res/xml
<? Xml version = "1.0" encoding = "UTF-8"?>
<Appwidget-provider xmlns: android = "http://schemas.android.com/apk/res/android"
Android: initialLayout = "@ layout/guide_widget"
Android: minHeight = "294.0dip"
Android: minWidth = "294.0dip"
Android: updatePeriodMillis = "1801000" type = "codeph" text = "/codeph"/>
(1) The outermost tag must be appwidget-provider.
(2) android: initialLayout specifies the layout file used by the widget.
(3) android: minHeight specifies the widget height, android: minWidth specifies the widget width. These two values cannot be specified at will. It is best to set them based on the number of rows and columns occupied by widgets to be placed. For example, if a widget contains three rows and two columns, minHeight should be (3*74)-2 = 220, and minWidth should be (2*74)-2 = 146
(4) android: updatePeriodMillis. The value is the refresh time of the widget. It is best to set it to more than one hour. Otherwise, system resources will be seriously wasted and power consumption will be high. At a fixed time, the system calls the onUpdate method of the widget. If the value is 0, the system does not update the widget.
4. widgets inherit from parent class methods
(1) onEnabled (Context context)
This method will be called after the user adds a widget
(2) onUpdate (Context context, AppWidgetManager
AppWidgetManager, int [] appWidgetIds)
This method is called after the user adds a widget to refresh the installed widget on the interface (called after onEnabled ).
The appWidgetManager parameter is used to refresh the interface.
AppWidgetIds is the id of all widgets of the application (You may add Multiple widgets, so this is an array)
(3) onDeleted (Context context, int [] appWidgetIds)
This method will be called after the widget is deleted (Note: After the widget is deleted, that is, this method is not used to delete the widget)
(4) onReceive (Context context, Intent intent)
This method is inherited from the aggreger and should not be used as much as possible. If you want to use it, you need to handle some special code yourself. Otherwise, the widget may have problems.
5. Page widget refresh and click events
(1) In widgets, you cannot use the findviewbyid method to obtain components. You need to use other methods. RemoteViews rv = new RemoteViews (context. getPackageName (),
R. layout. guide_widget );
RemoteViews is a fictitious component that carries layout.
(2) Click a component in layout to start activity or service.
Intent intent = new Intent (context, WidgetDemoActivity. class );
PendingIntent pendingIntent = PendingIntent. getActivity (context, 0, intent, 0 );
Rv. setOnClickPendingIntent (R. id. guide_0, pendingIntent );
(3) interface refresh
AppWidgetManager. updateAppWidget (appWidgetId, rv );
6. widgets support components used in layout.
FrameLayout, LinearLayout, RelativeLayout
AnalogClock, Button, Chronometer, ImageButton, ImageView, ProgressBar, TextView
7. Complete custom widget class code
Public class AppWidget extends AppWidgetProvider {
RemoteViews rv;
@ Override
Public void onUpdate (Context context, AppWidgetManager appWidgetManager,
Int [] appWidgetIds ){
System. out. println (context. getPackageName ());
Final int N = appWidgetIds. length;
// Because you may have added Multiple widgets, You need to traverse the appWidgetIds
For (int I = 0; I <N; I ++ ){
System. out. println (appWidgetIds [I]);
Int appWidgetId = appWidgetIds [I];
Rv = new RemoteViews (context. getPackageName (),
R. layout. guide_widget );
Intent intent = new Intent (context, WidgetDemoActivity. class );
Intent. setAction (context. getPackageName () + appWidgetId );
PendingIntent pendingIntent = PendingIntent. getActivity (context, 0,
Intent, 0 );
Rv. setOnClickPendingIntent (R. id. guide_0, pendingIntent );
AppWidgetManager. updateAppWidget (appWidgetId, rv );
}
Super. onUpdate (context, appWidgetManager, appWidgetIds );
}
}
8. widget lifecycle (android1.6)
(1) When you drag a widget to the interface, the following methods are called in order: onReceive-onEnabled-onReceive-onUpdate-onReceive
(2) When you drag a widget to delete it, the following methods are called in order:
OnReceive-onDeleted-onReceive-onDisabled
Free training courses: http://www.jinhusns.com/Products/Curriculum? Type = xcj