android之Widget开发详解实例三

之前已经有过两篇写Widget的了,实例一和实例二,如果乍看这篇有难度,可以先看看前两个比较简单的.本篇完成项目是一个小的心情记录器整体效果图如下:这里我们是通过点击桌面的widget弹出记录心情的activity的,实现方法如下:Intent intentClick = new Intent(context, update.class); Pending

大家好,又见面了,我是全栈君。

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

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

整体效果图如下:

android之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 操作界面的效果图
android之Widget开发详解实例三android之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<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);
    }
}

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

 

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

源码下载

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121413.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • latex的参考文献写法标准_参考文献举例

    latex的参考文献写法标准_参考文献举例使用Latex撰写论文时,通常会遇到参考文献格式问题,下面我将与大家分享Latex参考文献规范写作。 1、建议使用bib文件编写Reference这样可以减少格式、空格和标点符号的错误。 Bibtex使用方法简介:新建一个空白文本文档,把后缀名改成bib即可,比如TIP.bib; 用TexWorks打开文件,加入你想要引用的文章,有一个简便的添加的方式是使用百度/谷歌…

  • go微服务框架go-micro深度学习(二) 入门例子

    go微服务框架go-micro深度学习(二) 入门例子

  • 面试题(状态压缩dp)

    面试题(状态压缩dp)题解状态压缩dp,f[i][j]代表第i行状态为j的方案数#include<bits/stdc++.h>using namespace std;#define x first#define y second#define send string::npos#define lowbit(x) (x&(-x))#define left(x) x<<1#define right(x) x<<1|1#define transformu(s) tr..

  • redflag linux7.0 grub引导终极原创

    redflag linux7.0 grub引导终极原创很多同志在安装redflag时,安装引导时选了将引导安装在根分区而不是MBR分区,所以开机时还是只能进入XP系统而不能进入Linux系统其实要解决这个问题,引导进入redflag很简单,只要在xp下的C盘中找到menu.ls这个文件,用记事本找开,在其中添加title红旗Linux桌面7root(hd0,8)kernel/boot/vmlinuz-2.6….

  • JMH微基准测试入门案例

    JMH微基准测试入门案例JMH-javaMicrobenchmarkHarness微基准测试,他是测试某个方法的性能到底是好还是不好。这个测试框架是2013年发出来的,有JLT开发人员开发,后来归到OpenJDK下面。官网:http://openjdk.java.net/projects/code-tools/jmh/下面介绍什么是JMH,他是用来干什么的,怎么使用?基于idea中使用。创建…

  • 菜鸟的数学建模之路(四):BP神经网络

    个人理解BP神经网络属于人工智能范畴,在我看来它更多的是一个用于预测的工具,尽管它的用处还不仅于此。在数学建模上,很多时候,题目提供了很多历史数据,我经常用这些历史数据,用BP神经网络训练它,利用训练好的BP神经网络,来预测接下来的未知的值。BP神经网络关于该神经网络的繁多的理论这里就不去深究了,百度一查一大把,一堆的理论反正我是看不下去的,所以这里只是讲如何把BP神经网络当成一个工具来用,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号