Android 桌面组件【app widget】

  可将你的心情讯录并用桌面组件的形式展示于桌面上,并有丰富的表情可供选择并加载在桌面上,此功能类似于QQ上的各性签名,虽然手机是自己的但我们用的是Android 手机,难免会有朋友拿来把玩,此时可以看到手机主人的心情状况不是很好吗?或许可以自己把一些不满的想法偷偷用心情记录下来也可以。注:此功能并不提供多个心情保存,只能保存一个,如果需要的朋友可以在后文为我提建议,当然我觉得多个心情保存个人不想要这个功能。。如果要的话请留言。
好了,废话了好多,先让大家看下图:

Tip:这个小东西完全 是App widget 桌面组件,所以必须通过长按桌面或者点击menu调出来。

上篇app Widget 的DEMO 只是为TextView 添加点击事件,本篇将换另外的做法。通过点击布局弹出一个Activity 的操作界面,之后在这个操作界面进行表情的选择和心情的保存,那么如何通过点击打开一个Activity 界面呢?

    * 方法一:
      在我们组件的updateAppWidget 中注册一个广播,为 TextView 添加 一个点击的广播,之后在onReceive  接收广播 中如下代码:
      Intent intn=new Intent(context, update.class);
              intn.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(intn);


      通过为Intent 重新设置一个新的任务来打开Activity 此法即可启动一个Activity ,当然这种做法我是不建议的,因为重复了一个动作,具体怎么重复下文会具体告知大家。为TextView 注册广播可参考上面给出的链接,上文有介绍,在此就不多做介绍。
    * 方法二:
      此方法正是想告知大家如何重复的,即然我们可以为其注册广播那我们为什么不索性就为其做广播点击跳转?参考代码如下:
      Intent intentClick =
      new Intent(context, update.class);
              PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                      intentClick, 0);
              rv.setOnClickPendingIntent(R.id.layout, pendingIntent);


      通过这里的设置,上文将不用再去接收广播也可以达到想要的效果。

下面是通过点击打开 Activity 操作界面的效果图,在这里有点不好意思啦,因为即兴画的很丑,大家就将就着看吧,主要是理解App widget 的写法


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

  1. RemoteViews views =
  2. new RemoteViews(update.this
  3.                         .getPackageName(), R.layout.main);
  4.                 views.setTextViewText(R.id.TextView01, text);
  5.                 views.setImageViewResource(R.id.ImageView01, util.image[index]);
  6.                 ComponentName widget =
  7. new ComponentName(update.this,
  8.                         widgetProvider.class);
  9.                 AppWidgetManager manager = AppWidgetManager
  10.                         .getInstance(update.this);
  11.                 manager.updateAppWidget(widget, views);
复制代码

这里同样还是用到发RemoteViews 来接收值的变化,然后通过AppWidgetManager 这个桌面组件管理器去改新RemoteViews 。由于我们要时时刻保存用户记录的数据,这里只是用到了键值对保存。
下面贴出代码:

  1. package com.terry;
  2. import android.app.Activity;
  3. import android.appwidget.AppWidgetManager;
  4. import android.content.ComponentName;
  5. import android.content.SharedPreferences;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.AdapterView;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.ImageView;
  14. import android.widget.RemoteViews;
  15. import android.widget.Spinner;
  16. import android.widget.AdapterView.OnItemSelectedListener;
  17. public
  18. class update extends Activity {
  19.     private EditText mEditText;
  20.     private Button mButton;
  21.     private Spinner mSpinner;
  22.     private
  23. int index =
  24. 0;
  25.     @Override
  26.     protected
  27. void onCreate(Bundle savedInstanceState) {
  28.         // TODO Auto-generated method stub
  29. super.onCreate(savedInstanceState);
  30.         setContentView(R.layout.update);
  31.         mEditText = (EditText) findViewById(R.id.EditText01);
  32.         mButton = (Button) findViewById(R.id.Button01);
  33.         mSpinner = (Spinner) findViewById(R.id.Spinner01);
  34.         final ImageView iv = (ImageView) findViewById(R.id.ImageView01);
  35.         ArrayAdapter<String> adpter =
  36. new ArrayAdapter<String>(this,
  37.                 android.R.layout.simple_spinner_dropdown_item, util.text);
  38.         adpter
  39.                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  40.         mSpinner.setAdapter(adpter);
  41.         SharedPreferences settings = getSharedPreferences("settinginfo",
  42.                 Activity.MODE_PRIVATE);
  43.         index = settings.getInt("imageState", 0);
  44.         mEditText.setText(settings.getString("heart", ""));
  45.         iv.setImageResource(util.image[index]);
  46.         mSpinner.setSelection(index);
  47.         mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
  48.             @Override
  49.             public
  50. void onItemSelected(AdapterView<?> arg0, View arg1,
  51.                     int arg2, long arg3) {
  52.                 // TODO Auto-generated method stub
  53.                 index = arg2;
  54.                 iv.setImageResource(util.image[index]);
  55.             }
  56.             @Override
  57.             public
  58. void onNothingSelected(AdapterView<?> arg0) {
  59.                 // TODO Auto-generated method stub
  60.             }
  61.         });
  62.         mButton.setOnClickListener(new OnClickListener() {
  63.             @Override
  64.             public
  65. void onClick(View v) {
  66.                 // TODO Auto-generated method stub
  67.                 String text = mEditText.getText().toString();
  68.                 if (text.equals("")) {
  69.                     return;
  70.                 }
  71.                 SharedPreferences shared = getSharedPreferences("settinginfo",
  72.                         Activity.MODE_PRIVATE);
  73.                 SharedPreferences.Editor editor = shared.edit();
  74.                 editor.putInt("imageState", index);
  75.                 editor.putString("heart", text);
  76.                 editor.commit();
  77.                 RemoteViews views =
  78. new RemoteViews(update.this
  79.                         .getPackageName(), R.layout.main);
  80.                 views.setTextViewText(R.id.TextView01, text);
  81.                 views.setImageViewResource(R.id.ImageView01, util.image[index]);
  82.                 ComponentName widget =
  83. new ComponentName(update.this,
  84.                         widgetProvider.class);
  85.                 AppWidgetManager manager = AppWidgetManager
  86.                         .getInstance(update.this);
  87.                 manager.updateAppWidget(widget, views);
  88.                 update.this.finish();
  89.             }
  90.         });
  91.     }
  92. }
复制代码

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

  1. package com.terry;
  2. import android.app.Activity;
  3. import android.app.PendingIntent;
  4. import android.appwidget.AppWidgetManager;
  5. import android.appwidget.AppWidgetProvider;
  6. import android.content.ComponentName;
  7. import android.content.Context;
  8. import android.content.Intent;
  9. import android.content.SharedPreferences;
  10. import android.widget.RemoteViews;
  11. import android.widget.Toast;
  12. public
  13. class widgetProvider extends AppWidgetProvider {
  14.     private
  15. static RemoteViews rv;
  16.     @Override
  17.     public
  18. void onUpdate(Context context, AppWidgetManager appWidgetManager,
  19.             int[] appWidgetIds) {
  20.         // TODO Auto-generated method stub
  21. final
  22. int N = appWidgetIds.length;
  23.         for (int i =
  24. 0; i < N; i++) {
  25.             int appWidgetId = appWidgetIds;
  26.             updateAppWidget(context, appWidgetManager, appWidgetId);
  27.         }
  28.     }
  29.     @Override
  30.     public
  31. void onReceive(Context context, Intent intent) {
  32.         // TODO Auto-generated method stub
  33. super.onReceive(context, intent);
  34.         
  35.         
  36.     }
  37.     public
  38. static
  39. void updateAppWidget(Context context,
  40.             AppWidgetManager appWidgeManger, int appWidgetId) {
  41.         rv =
  42. new RemoteViews(context.getPackageName(), R.layout.main);
  43.         SharedPreferences shared = context.getSharedPreferences("settinginfo",
  44.                 Activity.MODE_PRIVATE);
  45.         // util.index = settings.getInt("imageState", 0);
  46.         // mEditText.setText(settings.getString("heart", ""));
  47.         rv.setTextViewText(R.id.TextView01, shared.getString("heart", context
  48.                 .getResources().getString(R.string.load)));
  49.         rv.setImageViewResource(R.id.ImageView01, util.image[shared.getInt(
  50.                 "imageState", 0)]);
  51.         Intent intentClick =
  52. new Intent(context, update.class);
  53.         PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
  54.                 intentClick, 0);
  55.         rv.setOnClickPendingIntent(R.id.layout, pendingIntent);
  56.         appWidgeManger.updateAppWidget(appWidgetId, rv);
  57.     }
  58. }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值