Android 桌面组件【app widget】 进阶项目--心情记录器(An-Beer工作室).doc_第1页
Android 桌面组件【app widget】 进阶项目--心情记录器(An-Beer工作室).doc_第2页
Android 桌面组件【app widget】 进阶项目--心情记录器(An-Beer工作室).doc_第3页
Android 桌面组件【app widget】 进阶项目--心情记录器(An-Beer工作室).doc_第4页
Android 桌面组件【app widget】 进阶项目--心情记录器(An-Beer工作室).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android 桌面组件【app widget】 进阶项目-心情记录器2010-08-10 21:38 by Terry_龙, 1404 visits, 网摘, 收藏, 编辑 之前有一篇是初探 Android App Widget 的文章,今天继续对上一例子进行扩展,并完成了一个小项目,直接可以拿来使用。上篇文章地址:Android 桌面组件【widget】初探,未接触过app Widget 的朋友可以去看一下,有助于理解本篇代码讲解。本篇完成项目名称为:【心情记录器】可将你的心情讯录并用桌面组件的形式展示于桌面上,并有丰富的表情可供选择并加载在桌面上,此功能类似于QQ上的各性签名,虽然手机是自己的但我们用的是Android 手机,难免会有朋友拿来把玩,此时可以看到手机主人的心情状况不是很好吗?或许可以自己把一些不满的想法偷偷用心情记录下来也可以。注:此功能并不提供多个心情保存,只能保存一个,如果需要的朋友可以在后文为我提建议,当然我觉得多个心情保存个人不想要这个功能。如果要的话请留言。好了,废话了好多,先让大家看下图:Tip:这个小东西完全 是App widget 桌面组件,所以必须通过长按桌面或者点击menu调出来。上篇app Widget 的DEMO 只是为TextView 添加点击事件,本篇将换另外的做法。通过点击布局弹出一个Activity 的操作界面,之后在这个操作界面进行表情的选择和心情的保存,那么如何通过点击打开一个Activity 界面呢? 方法一:在我们组件的updateAppWidget 中注册一个广播,为 TextView 添加 一个点击的广播,之后在onReceive 接收广播 中如下代码:Intentintn=newIntent(context,update.class);intn.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intn);通过为Intent 重新设置一个新的任务来打开Activity 此法即可启动一个Activity ,当然这种做法我是不建议的,因为重复了一个动作,具体怎么重复下文会具体告知大家。为TextView 注册广播可参考上面给出的链接,上文有介绍,在此就不多做介绍。 方法二:此方法正是想告知大家如何重复的,即然我们可以为其注册广播那我们为什么不索性就为其做广播点击跳转?参考代码如下:IntentintentClick=newIntent(context,update.class);PendingIntentpendingIntent=PendingIntent.getActivity(context,0,intentClick,0);rv.setOnClickPendingIntent(R.id.layout,pendingIntent);通过这里的设置,上文将不用再去接收广播也可以达到想要的效果。下面是通过点击打开 Activity 操作界面的效果图,在这里有点不好意思啦,因为即兴画的很丑,大家就将就着看吧,主要是理解App widget 的写法如何通过点击保存的与app Widget 做动态交互呢?来看下面这段代码RemoteViewsviews=newRemoteViews(update.this.getPackageName(),R.layout.main);views.setTextViewText(R.id.TextView01,text);views.setImageViewResource(R.id.ImageView01,util.imageindex);ComponentNamewidget=newComponentName(update.this,widgetProvider.class);AppWidgetManagermanager=AppWidgetManager.getInstance(update.this);manager.updateAppWidget(widget,views);这里同样还是用到发RemoteViews 来接收值的变化,然后通过AppWidgetManager这个桌面组件管理器去改新RemoteViews 。由于我们要时时刻保存用户记录的数据,这里只是用到了键值对保存。下面贴出代码:packagecom.terry;importandroid.app.Activity;importandroid.appwidget.AppWidgetManager;importandroid.content.ComponentName;importandroid.content.SharedPreferences;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.AdapterView;importandroid.widget.ArrayAdapter;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.RemoteViews;importandroid.widget.Spinner;importandroid.widget.AdapterView.OnItemSelectedListener;publicclassupdateextendsActivityprivateEditTextmEditText;privateButtonmButton;privateSpinnermSpinner;privateintindex=0;OverrideprotectedvoidonCreate(BundlesavedInstanceState)/TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.update);mEditText=(EditText)findViewById(R.id.EditText01);mButton=(Button)findViewById(R.id.Button01);mSpinner=(Spinner)findViewById(R.id.Spinner01);finalImageViewiv=(ImageView)findViewById(R.id.ImageView01);ArrayAdapteradpter=newArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,util.text);adpter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);mSpinner.setAdapter(adpter);SharedPreferencessettings=getSharedPreferences(settinginfo,Activity.MODE_PRIVATE);index=settings.getInt(imageState,0);mEditText.setText(settings.getString(heart,);iv.setImageResource(util.imageindex);mSpinner.setSelection(index);mSpinner.setOnItemSelectedListener(newOnItemSelectedListener()OverridepublicvoidonItemSelected(AdapterViewarg0,Viewarg1,intarg2,longarg3)/TODOAuto-generatedmethodstubindex=arg2;iv.setImageResource(util.imageindex);OverridepublicvoidonNothingSelected(AdapterViewarg0)/TODOAuto-generatedmethodstub);mButton.setOnClickListener(newOnClickListener()OverridepublicvoidonClick(Viewv)/TODOAuto-generatedmethodstubStringtext=mEditText.getText().toString();if(text.equals()return;SharedPreferencesshared=getSharedPreferences(settinginfo,Activity.MODE_PRIVATE);SharedPreferences.Editoreditor=shared.edit();editor.putInt(imageState,index);editor.putString(heart,text);mit();RemoteViewsviews=newRemoteViews(update.this.getPackageName(),R.layout.main);views.setTextViewText(R.id.TextView01,text);views.setImageViewResource(R.id.ImageView01,util.imageindex);ComponentNamewidget=newComponentName(update.this,widgetProvider.class);AppWidgetManagermanager=AppWidgetManager.getInstance(update.this);manager.updateAppWidget(widget,views);update.this.finish(););由于组件每创建一次都调用了一次updateAppWidget 这个方法,故此方法也必须去获取键值对packagecom.terry;importandroid.app.Activity;importandroid.app.PendingIntent;importandroid.appwidget.AppWidgetManager;importandroid.appwidget.AppWidgetProvider;importandroid.content.ComponentName;importandroid.content.Context;importandroid.content.Intent;importandroid.content.SharedPreferences;importandroid.widget.RemoteViews;importandroid.widget.Toast;publicclasswidgetProviderextendsAppWidgetProviderprivatestaticRemoteViewsrv;OverridepublicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,intappWidgetIds)/TODOAuto-generatedmethodstubfinalintN=appWidgetIds.length;for(inti=0;iN;i+)intappWidgetId=appWidgetIdsi;updateAppWidget(context,appWidgetManager,appWidgetId);OverridepublicvoidonReceive(Contextcontext,Intentintent)/TODOAuto-generatedmethodstubsuper.onReceive(context,intent);publicstaticvoidupdateAppWidget(Contextcontext,AppWidgetManagerappWidgeManger,intappWidgetId)rv=newRemoteViews(context.getPackageName(),R.layout.main);SharedPreferencesshared=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.imag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论