转载请注明出处:APP Widget 窗口小工具_Mr_Leixiansheng的博客-CSDN博客
效果图:
步骤:
1、res下新建xml文件夹和appwodget文件
2、在xml文件夹下新建APP Widget信息的布局文件,设置APP Widget的大小和要显示的APP Widget的布局文件(要显示的布局文件才是APP Widget的界面)
3、layout中新建APP Widget的布局文件,设置你要显示的样式(图案、文本······)
4、新建自己的APP Widget类,继承AppWidgetProvider(自己可重写其生命周期)
5、在Manifest中进行注册(APP Widget属于广播)
代码如下:
1、新建xml文件夹和xml文件
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="72dp"
android:minWidth="294dp"
android:initialLayout="@layout/example_appwidget">
</appwidget-provider>
2、桌面APP Widget布局设置
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view"
android:text="I am a app widget"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:text="响应"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3、创建类继承AppWidgetProvider
package com.example.administrator.appwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;
/**
* Created by Administrator on 2016/12/12.
*/
public class ExampleAppWidget extends AppWidgetProvider {
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i = 0; i < appWidgetIds.length; i++) {
//创建intent对象
Intent intent = new Intent(context, JumpActivity.class);
//创建 PendingIntent对象
PendingIntent pendingIntent = PendingIntent.getActivities(context, 0, new Intent[]{intent}, 0);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
//为按钮绑定监听
//第一个参数 绑定哪个控件
//第二个参数 做什么响应
remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
//更新AppWidget
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
}
}
4、点击app widget 对应的响应活动及布局
package com.example.administrator.appwidget;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
/**
* Created by Administrator on 2016/12/14.
*/
public class JumpActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.jump_layout);
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="This is jump Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView" />
</LinearLayout>
5、注册
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.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=".ExampleAppWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info"/>
</receiver>
</application>
</manifest>
Kotlin写法:
package com.leixiansheng.kotlintest
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
/**
* Implementation of App Widget functionality.
*/
class NewAppWidget : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
override fun onEnabled(context: Context) {
// Enter relevant functionality for when the first widget is created
}
override fun onDisabled(context: Context) {
// Enter relevant functionality for when the last widget is disabled
}
companion object {
internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager,
appWidgetId: Int) {
val intent = Intent(context, SecondActivity::class.java);
val pending = PendingIntent.getActivities(context, 0, arrayOf(intent), 0)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.new_app_widget)
views.setOnClickPendingIntent(R.id.button,pending)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views)
}
}
}