0
点赞
收藏
分享

微信扫一扫

【达内课程】Android中的AppWidget

【达内课程】Android中的AppWidget_widget

1、布局activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:gravity="center"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button1"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button2"/>
</LinearLayout>

</LinearLayout>

2、配置文件meta.xml
【达内课程】Android中的AppWidget_ide_02
【达内课程】Android中的AppWidget_ide_03
Root element写
appwidget-provider

布局占几个格子是有公式的

70N-30

如果我们的小部件是一个4X1的布局,那么,
70x4-30=250
70x1-30=40

所以最终meta.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="250dp"
android:minHeight="40dp"
android:initialLayout="@layout/activity_main"
>

</appwidget-provider>

3、控制器MyappWidget
MyappWidget 必须extends AppWidgetProvider

4、别忘记在AndroidManifest中注册

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

运行程序后,就可以使用这个小部件了
【达内课程】Android中的AppWidget_xml_04

下面重点来看MyappWidget
需要重写4个方法

public class MyappWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.i("info","onUpdate...");
}

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
Log.i("info","onDeleted...");
}

@Override
public void onEnabled(Context context) {
Log.i("info","onEnabled...");
}

@Override
public void onDisabled(Context context) {
Log.i("info","onDisabled...");
}
}

【达内课程】Android中的AppWidget_ide_05

【达内课程】Android中的AppWidget_xml_06

【达内课程】Android中的AppWidget_xml_07
【达内课程】Android中的AppWidget_xml_08
【达内课程】Android中的AppWidget_widget_09

/**
* AppWidget控制类
*/
public class MyappWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.i("info","onUpdate..."+ Arrays.toString(appWidgetIds));
//manager
//remoteviews
//updateAppWidget
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.activity_main);
views.setTextColor(R.id.tv, Color.RED);
views.setTextViewText(R.id.tv,"Hello world");
appWidgetManager.updateAppWidget(appWidgetIds,views);
}

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
Log.i("info","onDeleted..."+ Arrays.toString(appWidgetIds));
}

@Override
public void onEnabled(Context context) {
Log.i("info","onEnabled...");
}

@Override
public void onDisabled(Context context) {
Log.i("info","onDisabled...");
}
}

【达内课程】Android中的AppWidget_android_10

现在实现点击按钮1打开Activity
【达内课程】Android中的AppWidget_ide_11

//给button1添加点击意图
Intent intent = new Intent(context,MainActivity.class);
PendingIntent pi1 = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn1,pi1);

现在点击button2让textview改变随机一个颜色
【达内课程】Android中的AppWidget_ide_12

//给button2添加点击意图,发送自定义广播
Intent i2 = new Intent("ACTION_BUTTON2_CLICKED");
i2.setComponent(new ComponentName(context,MyappWidget.class));
PendingIntent pi2 = PendingIntent.getBroadcast(context,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn2,pi2);
appWidgetManager.updateAppWidget(appWidgetIds,views);

AndroidManifest.xml中注册,由于MyappWidget父类是BroadcastReceiver,所以直接注册

<receiver android:name=".MyappWidget">
<intent-filter>
<action android:name="ACTION_BUTTON2_CLICKED"/>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/meta"
/>
</receiver>

MyappWidget中重写onReceive方法

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.i("info","onUpdate..."+ Arrays.toString(appWidgetIds));
//manager
//remoteviews
//updateAppWidget
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.activity_main);
views.setTextColor(R.id.tv, color);
views.setTextViewText(R.id.tv,"Hello world");
//给button1添加点击意图
Intent intent = new Intent(context,MainActivity.class);
PendingIntent pi1 = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn1,pi1);
//给button2添加点击意图,发送自定义广播
Intent i2 = new Intent("ACTION_BUTTON2_CLICKED");
i2.setComponent(new ComponentName(context,MyappWidget.class));
PendingIntent pi2 = PendingIntent.getBroadcast(context,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn2,pi2);

appWidgetManager.updateAppWidget(appWidgetIds,views);
}


举报

相关推荐

0 条评论