如何在android中以编程方式更改应用程序小部件中的图像

2023-11-26

我设计了一个 Android 应用程序小部件,其中有两个ImageView我想更改两个图像ImageView当单击图像以及调用方法时。 现在我用RemoteView像这样

RemoteViews views1 = new RemoteViews(context.getPackageName(),
                R.layout.activity_main);
        views1.setOnClickPendingIntent(R.id.smsImageView, pendIntent1);
        appWidgetManager.updateAppWidget(appWidgetIds, views1);

但我不知道如何更改图像imageView Thanks.


小部件_布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/imageview1_image1"/>

    <ImageView
        android:id="@+id/imageview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:src="@drawable/imageview2_image1" />

</LinearLayout>

在您的 AppWidgetProvider 中:

public class SwitchWidget extends AppWidgetProvider {
public static String SWITCH_WIDGET_UPDATE = "MainActivity.Switch";
public static String IMAGEVIEW1 = "imageview1";
public static String IMAGEVIEW2 = "imageview2";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    updateSwitch1(context, appWidgetManager, appWidgetIds[0]);
}

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    super.onReceive(context, intent);
    Log.d("SWitch Widget", "On Receive");




    RemoteViews remoteViews;

    AppWidgetManager appWidgetManager = AppWidgetManager
            .getInstance(context);

    if (SWITCH_WIDGET_UPDATE.equals(intent.getAction())) {
        Log.d("SWitch Widget", "Widget Choose");
        ComponentName thisAppWidget = new ComponentName(
                context.getPackageName(), getClass().getName());

        int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
        for (int appWidgetID : ids) {

                updateSwitch1(context, appWidgetManager, appWidgetID);
            } 

        }

    }
    if (intent.getAction().equals(IMAGEVIEW1)) {




            remoteViews = new RemoteViews(context.getPackageName(),
                    R.layout.widget1);
            if(flag){
            flag = flase           
                remoteViews.setImageViewResource(R.id.imageview1,
                        R.drawable.imageview1_image2);
                 startService(new Intent(this, YOUR_SERVICE_CLASS_NAME.class)); 
            } else {
            flag = true;
                remoteViews.setImageViewResource(R.id.imageview1,
                        R.drawable.imageview1_image1);
                startService(new Intent(this, YOUR_SERVICE_CLASS_NAME.class));
            }
            appWidgetManager.updateAppWidget(new ComponentName(context,
                    SwitchWidget.class), remoteViews);


        }
        else if (intent.getAction().equals(IMAGEVIEW2)) {

            remoteViews = new RemoteViews(context.getPackageName(),
                    R.layout.widget1);
            if(flag){
         flag = flase          
                remoteViews.setImageViewResource(R.id.imageview2,
                        R.drawable.imageview2_image2);
            } else {
        flag = true;
                remoteViews.setImageViewResource(R.id.imageview2,
                        R.drawable.imageview2_image1);
            }
            appWidgetManager.updateAppWidget(new ComponentName(context,
                    SwitchWidget.class), remoteViews);

      }



private void updateSwitch1(Context context,
        AppWidgetManager appWidgetManager, int appWidgetId) {
    // TODO Auto-generated method stub
    Log.d("SWitch Widget", "Switch1");
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.widget1);



    Intent imageview1Intent= new Intent(context, SwitchWidget.class);
    wifiIntent.putExtra("ID", appWidgetId);
    wifiIntent.setAction(IMAGEVIEW1);
    PendingIntent imageview1PendingIntent = PendingIntent.getBroadcast(context,
            0, imageview1Intent,0);
    remoteViews.setOnClickPendingIntent(R.id.imageview1, imageview1PendingIntent);

    Intent imageview2Intent= new Intent(context, SwitchWidget.class);
    wifiIntent.putExtra("ID", appWidgetId);
    wifiIntent.setAction(IMAGEVIEW2);
    PendingIntent imageview2PendingIntent = PendingIntent.getBroadcast(context,
            0, imageview2Intent,0);
    remoteViews.setOnClickPendingIntent(R.id.imageview2, imageview2PendingIntent);

    appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
    }

  }

并且在您的小部件接收器中添加这两个操作:

 <action android:name="imageview1" />
  <action android:name="imageview2" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中以编程方式更改应用程序小部件中的图像 的相关文章

  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • 在我的 Android 应用程序中使用 ServerValue.TIMESTAMP

    我读过很多相关的 stackoverflow 问题 ServerValue TIMESTAMP 但我不知道如何在我的应用程序中使用它 我需要获取帖子创建的时间戳 时间戳应该添加到与帖子的 uid 作者等相同的位置 代码片段其中写这篇文章Fi
  • 如何在 ADB 连接期间禁用电池充电?

    问题描述 每次我在电脑和手机之间连接 USB 线时 电池都会自动充电 我想使用 ADB 协议 但我不想在 ADB 连接期间为电池充电 是否可以关闭此充电功能 当然 我该怎么做呢 环境 Android 操作系统 4 及更高版本的手机 我只需要
  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 在选项卡上保存数据

    我有 3 个选项卡 每个选项卡都有一个单独的活动 我想在用户单击任一选项卡上的 保存 时保存数据 有几个选项可供选择 共享首选项 全局变量或将对象保存在上下文中 编辑 我必须保存图像和文本字段 Android 共享首选项 https sta
  • 如何在 NumberPicker 中一次显示 3 个以上的值

    我正在创建一个数字选择器 如下图所示 但如果有可用空间 我想显示 3 个以上的值 该选择器有 20 个项目 并且有足够的空间来显示 3 个以上的值 这可以使用 NumberPicker 来完成吗 只需以编程方式设置numberPicker
  • 使用 Android Studio 进行调试永远停留在“等待调试器”状态

    UPDATE The supposed重复是一个关于陷入 等待调试器 执行时Run 而这个问题就陷入了 等待调试器 执行时Debug 产生问题的步骤不同 解决方案也不同 每当我尝试使用Android Studio的调试功能时 运行状态总是停
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • 具有代理设置的 Android 模拟器 - 致命错误:.//android/base/sockets/ 检查失败:isValidFd(fd)。 FD 1404 最大1024

    需要使用代理设置运行模拟器 我在命令提示符中使用以下命令来启动模拟器 emulator avd AVD for 3 7 WVGA Nexus One http proxy http username password IP Port 如果没
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • 由于“进程崩溃”,仪器运行失败。

    我想运行以下测试 package com xxx yyy import android content Context import androidx test InstrumentationRegistry import androidx
  • 无法使用文件提供程序从内部存储打开 PDF 以便在 Android 8 和 9 上查看

    仅适用于 Android 8 和 9 我这里有一个 PDF 文件管理器 String url file storage emulated 0 Android data com verna poc files Download mypdf p
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 如何正确编写AttributeSet的XML?

    我想创建一个面板适用于 Android 平台的其他小部件 http code google com p android misc widgets 在运行时 XmlPullParser parser getResources getXml R
  • 为什么带处理程序的连续自动对焦相机不允许切换相机闪光灯?

    到目前为止我所做的 我已经实现了用于读取二维码的自定义相机 需要继续聚焦相机以获得更好的二维码读取 我的问题当我使用处理程序每 秒聚焦一次时 相机闪光灯开 关按钮不起作用 或者打开和关闭相机闪光灯需要太多时间 当我删除每秒自动对焦相机的代码
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中
  • 将焦距(以毫米为单位)转换为像素 - Android

    在 Android 中 我当前正在访问camera s焦距通过使用getFocalLength in Camera1 Camera2不是一个选择 我正在尝试完全填充当前的计算 focal length pix focal length m

随机推荐