¿Cómo podemos cambiar la imagen de un botón de widget?

Estoy tratando de encontrar una manera de cambiar la imagen del botón i para mostrar el estado actual de la aplicación.

Esto es lo que he hecho hasta ahora

HelloWidgetProvider.java

public class HelloWidgetProvider extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub //super.onDeleted(context, appWidgetIds); Toast.makeText(context, "onDeleted()", Toast.LENGTH_LONG).show(); } @Override public void onDisabled(Context context) { // TODO Auto-generated method stub //super.onDisabled(context); Toast.makeText(context, "onDisabled()", Toast.LENGTH_LONG).show(); } @Override public void onEnabled(Context context) { // TODO Auto-generated method stub //super.onEnabled(context); Toast.makeText(context, "onEnabled()", Toast.LENGTH_LONG).show(); } public static String MY_WIDGET_UPDATE = "MY_OWN_WIDGET_UPDATE"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub CharSequence strWidgetText = "App Status"; RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.hellowidget_layout); updateViews.setTextViewText(R.id.widgettext, strWidgetText); appWidgetManager.updateAppWidget(appWidgetIds, updateViews); super.onUpdate(context, appWidgetManager, appWidgetIds); Toast.makeText(context, "onUpdate()", Toast.LENGTH_LONG).show(); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub super.onReceive(context, intent); // if(MY_WIDGET_UPDATE.equals(intent.getAction())){ Toast.makeText(context, "onReceiver()", Toast.LENGTH_LONG).show(); //} } } <?xml version="1.0" encoding="utf-8"?> 

Hellowidget_layout.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" > <Button android:id="@+id/widgettext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#000000" android:background="@drawable/icon" android:text="Test Button" /> </LinearLayout> 

Hellowidgetproviderinfo.xml

  <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="146dp" android:minHeight="72dp" android:updatePeriodMillis="1000" android:initialLayout="@layout/hellowidget_layout" > </appwidget-provider> 

Por favor ayúdame gracias

One Solution collect form web for “¿Cómo podemos cambiar la imagen de un botón de widget?”

Tengo implementar el widget en que tengo mostrar ImageButton como togglebutton para cambiar la imagen y el texto

Aquí está la clase ToogleImageWidget

 public class ToggleImageWidget extends AppWidgetProvider { private static boolean status = false; private RemoteViews remoteViews; private ComponentName watchWidget; @Override public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds ) { remoteViews = new RemoteViews( context.getPackageName(), R.layout.main ); watchWidget = new ComponentName( context, ToggleImageWidget.class ); //remoteViews.setTextViewText( R.id.tbutton, "Time = " + format.format( new Date())); Intent intentClick = new Intent(context,ToggleImageWidget.class); intentClick.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ""+appWidgetIds[0]); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, appWidgetIds[0],intentClick, 0); remoteViews.setOnClickPendingIntent(R.id.img_btn, pendingIntent); appWidgetManager.updateAppWidget( watchWidget, remoteViews ); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction()==null) { Bundle extras = intent.getExtras(); if(extras!=null) { //int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); remoteViews = new RemoteViews( context.getPackageName(), R.layout.main ); if(status){ remoteViews.setImageViewResource(R.id.img_btn, R.drawable.radio_btn_off_img); remoteViews.setTextViewText(R.id.widget_textview, "Off"); status = false; }else{ remoteViews.setImageViewResource(R.id.img_btn, R.drawable.radio_btn_img); remoteViews.setTextViewText(R.id.widget_textview, "On"); status = true; } watchWidget = new ComponentName( context, ToggleImageWidget.class ); (AppWidgetManager.getInstance(context)).updateAppWidget( watchWidget, remoteViews ); //Toast.makeText(context, "Clicked "+status, 2000).show(); } } else { super.onReceive(context, intent); } } } 

Aquí está mi código de archivo main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout01" android:layout_height="50dp" android:background="#55ffffff" android:layout_width="100dp" android:orientation="horizontal" android:gravity="center_vertical|center_horizontal"> <ImageButton android:layout_width="32dp" android:layout_height="32dp" android:id="@+id/img_btn" android:background="@drawable/radio_btn_off_img" /> <TextView android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center_vertical" android:paddingLeft="5dp" android:textColor="@android:color/black" android:text="Off" android:textSize="8pt" android:id="@+id/widget_textview"/> </LinearLayout> 

Aquí está mi código de archivo AndroidManifest.xml

 <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:name=".ToggleImageWidget" android:label="ToggleImageWidget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/img_widget_provider" /> </receiver> </application> 

Y aquí está mi código de archivo img_widget_provider.xml que se almacena en el directorio res / xml que ha creado el directorio xml en el directorio res si no existe.

 <?xml version="1.0" encoding="utf-8" ?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="146dp" android:initialLayout="@layout/main" android:updatePeriodMillis="1000" android:minHeight="144dp"/> 
  • XmlPullParserException función no admitida
  • RuntimeException causada debido a la excepción de seguridad
  • ¿Cómo puedo hacer que mi cuadro de diálogo de Android sea de pantalla completa?
  • Llame a actvity después de que el viewpager haya terminado
  • ¿Cómo subir videos a Facebook usando Facebook Android SDK 4.x?
  • 'RealmNoticeModelClass' tiene una clave primaria, use 'createObject (Class <E>, Object)' en su lugar
  • android phonegap cordova webview eventos
  • ListView Actualización de una sola fila
  • Consulta en la base de datos Realm: Buscar todos los objetos que contengan la cadena de consulta
  • Cómo manejar onClick () en 100 botones?
  • Finite State Machine (FSM) y Java de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.