android之Widget开发详解实例三

发布时间:2025-12-09 13:50:23 浏览次数:4

之前已经有过两篇写Widget的了,实例一和实例二,如果乍看这篇有难度,可以先看看前两个比较简单的.

本篇完成项目是一个小的心情记录器

整体效果图如下:

这里我们是通过点击桌面的widget弹出记录心情的activity的,

实现方法如下:

Intent intentClick = new Intent(context, update.class);        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,                intentClick, 0);        rv.setOnClickPendingIntent(R.id.layout, pendingIntent);

下面是通过点击打开 Activity 操作界面的效果图

如何通过点击保存的与app Widget 做动态交互呢?来看下面这段代码

RemoteViews views = new RemoteViews(update.this                        .getPackageName(), R.layout.main);                views.setTextViewText(R.id.TextView01, text);                views.setImageViewResource(R.id.ImageView01, util.image[index]);                ComponentName widget = new ComponentName(update.this,                        widgetProvider.class);                AppWidgetManager manager = AppWidgetManager                        .getInstance(update.this);                manager.updateAppWidget(widget, views);

这里同样还是用到发RemoteViews 来接收值的变化,然后通过AppWidgetManager这个桌面组件管理器去改新RemoteViews 。由于我们要时时刻保存用户记录的数据,这里只是用到了键值对保存。前两篇已经讲得知识点差不多了,所以这里就不仔细讲解知识点了,下面贴上代码:

package com.terry;import android.app.Activity;import android.appwidget.AppWidgetManager;import android.content.ComponentName;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.RemoteViews;import android.widget.Spinner;import android.widget.AdapterView.OnItemSelectedListener;public class update extends Activity {    private EditText mEditText;    private Button mButton;    private Spinner mSpinner;    private int index = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.update);        mEditText = (EditText) findViewById(R.id.EditText01);        mButton = (Button) findViewById(R.id.Button01);        mSpinner = (Spinner) findViewById(R.id.Spinner01);        final ImageView iv = (ImageView) findViewById(R.id.ImageView01);        ArrayAdapter<String> adpter = new ArrayAdapter<String>(this,                android.R.layout.simple_spinner_dropdown_item, util.text);        adpter                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        mSpinner.setAdapter(adpter);        SharedPreferences settings = getSharedPreferences("settinginfo",                Activity.MODE_PRIVATE);        index = settings.getInt("imageState", 0);        mEditText.setText(settings.getString("heart", ""));        iv.setImageResource(util.image[index]);        mSpinner.setSelection(index);        mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView arg0, View arg1,                    int arg2, long arg3) {                // TODO Auto-generated method stub                index = arg2;                iv.setImageResource(util.image[index]);            }            @Override            public void onNothingSelected(AdapterView arg0) {                // TODO Auto-generated method stub            }        });        mButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                String text = mEditText.getText().toString();                if (text.equals("")) {                    return;                }                SharedPreferences shared = getSharedPreferences("settinginfo",                        Activity.MODE_PRIVATE);                SharedPreferences.Editor editor = shared.edit();                editor.putInt("imageState", index);                editor.putString("heart", text);                editor.commit();                RemoteViews views = new RemoteViews(update.this                        .getPackageName(), R.layout.main);                views.setTextViewText(R.id.TextView01, text);                views.setImageViewResource(R.id.ImageView01, util.image[index]);                ComponentName widget = new ComponentName(update.this,                        widgetProvider.class);                AppWidgetManager manager = AppWidgetManager                        .getInstance(update.this);                manager.updateAppWidget(widget, views);                update.this.finish();            }        });    }}

由于组件每创建一次都调用了一次updateAppWidget 这个方法,故此方法也必须去获取键值对

package com.terry;import android.app.Activity;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.widget.RemoteViews;import android.widget.Toast;public class widgetProvider extends AppWidgetProvider {    private static RemoteViews rv;    @Override    public void onUpdate(Context context, AppWidgetManager appWidgetManager,            int[] appWidgetIds) {        // TODO Auto-generated method stub        final int N = appWidgetIds.length;        for (int i = 0; i < N; i++) {            int appWidgetId = appWidgetIds[i];            updateAppWidget(context, appWidgetManager, appWidgetId);        }    }    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        super.onReceive(context, intent);                    }    public static void updateAppWidget(Context context,            AppWidgetManager appWidgeManger, int appWidgetId) {        rv = new RemoteViews(context.getPackageName(), R.layout.main);        SharedPreferences shared = context.getSharedPreferences("settinginfo",                Activity.MODE_PRIVATE);        // util.index = settings.getInt("imageState", 0);        // mEditText.setText(settings.getString("heart", ""));        rv.setTextViewText(R.id.TextView01, shared.getString("heart", context                .getResources().getString(R.string.load)));        rv.setImageViewResource(R.id.ImageView01, util.image[shared.getInt(                "imageState", 0)]);        Intent intentClick = new Intent(context, update.class);        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,                intentClick, 0);        rv.setOnClickPendingIntent(R.id.layout, pendingIntent);        appWidgeManger.updateAppWidget(appWidgetId, rv);    }}

里面有用到一些图片资源,如果对项目有兴趣的话,

可以去下载整个项目的源码:

源码下载

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477