[Android] Cómo utilizar el widget

1. Uso básico

(1) Declare en AndroidManifest.xml: el
widget es esencialmente un receptor de transmisión. La transmisión es uno de los cuatro componentes principales y debe declararse en AndroidManifest:

<receiver android:name=".TestWidget">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@layout/setting_widget">	此处定义了资源文件
    </meta-data>
</receiver>

(2) El archivo de recursos setting_widget.xml:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="140dp"
    android:minWidth="140dp"
    android:previewImage="@drawable/point64red"		预览图
    android:initialLayout="@layout/layout_widget"	这里才是他真正的布局文件
    android:updatePeriodMillis="20000"				每隔多久更新一次
    android:widgetCategory="home_screen"			可以显示到主屏幕上
    >

</appwidget-provider>

(3) archivo de diseño layout_widget.xml:

<?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">

</LinearLayout>

(4) Herede la clase AppWidgetProvider y vuelva a escribir los métodos onReceive y onUpdate: el
método onUpdate envía una transmisión, se la envía a sí mismo y luego la obtiene y procesa en onReceive.

public class TestWidget extends AppWidgetProvider {
    
    

    public static final String WIDGET_BUTTON_ACTION = "WIDGET_BUTTON_ACTION";

    @Override
    public void onReceive(Context context, Intent intent) {
    
    
        super.onReceive(context, intent);
        if(intent != null && TextUtils.equals(intent.getAction(), WIDGET_BUTTON_ACTION)){
    
    
            Log.i("djtest", "onReceive: be clicked");
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout_widget);
            remoteViews.setTextViewText(R.id.widget_textview, "be clicked");
            remoteViews.setTextColor(R.id.widget_textview, Color.RED);
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
            ComponentName componentName = new ComponentName(context, TestWidget.class);

            appWidgetManager.updateAppWidget(componentName, remoteViews);
        }
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
    
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout_widget);

        Intent intent = new Intent();
        intent.setClass(context, TestWidget.class);
        intent.setAction(WIDGET_BUTTON_ACTION);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,0);
        remoteViews.setOnClickPendingIntent(R.id.widget_button, pendingIntent);

        // 告诉控件已经操作响应过了
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

    }
}

2. Otro

Comunicación con el servicio: puede comunicarse a través de la transmisión.

Supongo que te gusta

Origin blog.csdn.net/qq_30885821/article/details/108893114
Recomendado
Clasificación