本篇完成项目名称为:【心情记录器】
可将你的心情讯录并用桌面组件的形式展示于桌面上,并有丰富的表情可供选择并加载在桌面上,此功能类似于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 做动态交互呢?来看下面这段代码
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 adpter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, util.text); adpter .setDropDownViewResource(android.R.layout.simple_s pinner_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(); } }); } }
由于组件每创建一次都调用了一次Onupdate() 这个方法,故此方法也必须去获取键值对
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; 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); } }
Tip:上面所有知识点,之前所有文章都有提到,有不懂的地方可以自行做参考。
发表评论
-
SQL Server -- 从全文索引中去掉普通字符串
2012-07-06 09:52 1033SQL Server 2008引入了标识出那些对全文索引搜 ... -
.net正则基础
2012-07-06 09:46 567初学正则时,对于Regex类不熟悉,遇到问题不知道该用哪种 ... -
ActionScript 3.0综合应用案例(图像识别+位图滤镜+Molehill)
2012-07-02 12:55 692本文是对ActionScript 3.0的一个综合应用案例 ... -
Popup窗口访问父窗口的方法以及相互传值
2012-07-02 12:55 845owner属性 此 IVisualElement 对象的 ... -
3D 视频墙 3D IMAGE/MEDIA GRID/WALL GALLERY
2012-07-02 12:55 702If you are interested with th ... -
第11课 spark基本类型
2012-07-02 12:55 475session11/src/Tester.mxml ... -
使用ItemRenderer为DropDownList定义下拉选项
2012-07-02 12:55 519首先新建一个ItemRenderer组件 flex/sp ... -
为什么用*? 为什么不用*?
2012-07-01 10:24 555离开RoR有一段时间了,本来不想提些负面的东西,不过JE猎 ... -
谈谈我对未来的想法吧
2012-07-01 10:24 497来总行珠海研发中 ... -
实战 OpenLaszlo 与 db4o
2012-07-01 10:24 437本文于去年年底完 ... -
java面笔试总结
2012-07-01 10:24 5672010、10、12 湖南华诺集团面试题集 1、D ... -
PureMVC之通信
2012-07-01 10:24 693PureMVC的通信并不采用Flash的EventDisp ... -
AS3 库资源 很多非常有用的类库 - Qzone日志
2012-06-30 16:50 485AS3 库资源 很多非常有用的类库 - Qzone日志 20 ... -
flex 联机游戏开发 - 四国军棋游戏:(一)引子
2012-06-30 16:50 714flex 联机游戏开发 - 四国军棋游戏:(一)引子 201 ... -
使用FLEX 和 Actionscript开发FLASH 游戏2-2
2012-06-30 16:50 472使用FLEX 和 Actionscript开发FLASH 游戏 ... -
基于Flash的即时通讯开发思路
2012-06-30 16:49 803基于Flash的即时通讯开 ... -
非常有用的类库 APIs、Libs、Components
2012-06-30 16:49 657非常有用的类库 APIs、Libs、Components 2 ...
相关推荐
NULL 博文链接:https://l12052124.iteye.com/blog/758380
android 桌面组件 App widget的使用.
文档介绍了AppWidget 框架类,在 Android 如何使用 Widget,AppWidget 框架的主要类介绍,AppWidgetManger 类, 继承自 AppWidgetProvider 可实现的方法,DEMO 讲解 ,1、新建AppWidgetProvderInfo,2、写一个类继承...
此demo实现 android 桌面控件appwidget
本文实例讲述了Android桌面组件App Widget用法。分享给大家供大家参考。具体如下: 这里模拟一个案例:把AppWidget添加到桌面后,点击AppWidget后AppWidget文本会轮回改变 main.xml布局文件: <?xml version=1.0...
可将你的心情讯录并用桌面组件的形式展示于桌面上,并有丰富的表情可供选择并加载在桌面上,此功能类似于QQ上的各性签名,可以看到手机主人的心情状况不是很好,注:因为这个小程序完全是App widget 桌面组件,所以...
安卓app开发项目-LumaQQ-Android qq 代码(源码).zip安卓app开发项目-LumaQQ-Android qq 代码(源码).zip安卓app开发项目-LumaQQ-Android qq 代码(源码).zip安卓app开发项目-LumaQQ-Android qq 代码(源码).zip安卓app...
基于Android手机app开发与设计--毕业设计--开题分析报告.pdf基于Android手机app开发与设计--毕业设计--开题分析报告.pdf基于Android手机app开发与设计--毕业设计--开题分析报告.pdf基于Android手机app开发与设计--...
本文实例讲述了Android桌面组件App Widget用法。分享给大家供大家参考。具体如下: Android开发应用除了程序应用,还有App Widget应用。好多人会开发程序应用而不会开发App Widget应用。本帖子就是帮助大家学习如何...
基于Android手机app开发与设计--毕业设计--开题分析报告 (2).docx基于Android手机app开发与设计--毕业设计--开题分析报告 (2).docx基于Android手机app开发与设计--毕业设计--开题分析报告 (2).docx基于Android手机...
Android小部件AppWidget.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android -- AppWidget源码
AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图: 图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型...
android Widget小组件开发.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
jar包,亲测可用
Android应用源码开发Demo,主要用于毕业设计学习。
Android应用源码开发Demo,主要用于毕业设计学习。
漫画App,适合新手进阶项目,MVP RxJava Retrofit Dagger2 rxlifecycle