【问题标题】:How to change the image in app widget programmatically in android如何在android中以编程方式更改应用小部件中的图像
【发布时间】:2013-01-13 21:49:14
【问题描述】:

我设计了一个 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 中的图像 谢谢。

【问题讨论】:

标签: android android-widget remoteview


【解决方案1】:

Widget_Layout:

<?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" />

【讨论】:

  • @NaveenKumar 检查我的答案并通知我这是否对您有帮助。
  • 我也想在点击ImageView时启动一个服务我是如何实现的
  • 是的,但我不知道在应用小部件中单击 imageView 时如何启动服务
  • 感谢@Rahil2952 经过一些修改后它工作得很好......再次感谢
【解决方案2】:

只需调用函数为其设置图像资源。

view1.setImageViewResources(R.id.img, IMGS[1])

那么你就知道了

【讨论】:

  • 我如何在单击 imageView..setOnClickListener(new OnClickListener() { public void onClick(View v) { })等图像时调用方法;​​
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 2013-05-30
  • 2012-02-29
  • 2012-09-29
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多