Cómo establecerLayoutParams en elementos añadidos dinámicamente en Widget
Actualmente, estoy agregando elementos dinámicamente a mi widget usando lo siguiente:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_design); RemoteViews newView = new RemoteViews(context.getPackageName(), R.layout.widget_item); views.addView(R.id.view_container, newView);
Pero ¿cómo puedo agregar dinámicamente márgenes, pesos y otras propiedades a los elementos agregados?
- Generar Java desde WSDL para usarlo en Android con el cliente SOAP ksoap2-android?
- JavascriptInterface llamado pero no mostrando Toast
- Código demasiado grande y demasiados errores constantes (Android Studio)
- Error "No se puede crear instancias de actividad"
- ¿Cómo administrar una conexión Bluetooth en Android a través de cambios de configuración?
Actualmente he intentado (usando el código que he encontrado de diversos sitios):
LinearLayout item = (LinearLayout) ((Activity) context).findViewById(R.id.widgetItem); MarginLayoutParams marginParams = new MarginLayoutParams(item.getLayoutParams()); marginParams.setMargins(10, 50, 4, 5); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(marginParams); item.setLayoutParams(layoutParams);
Pero esta fuerza se cierra
LogCat:
09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): EXCEPCIÓN FATAL: principal 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): java.lang.RuntimeException: No se puede iniciar com.example receptor. Test.HomeWidget: java.lang.ClassCastException: android.app.ReceiverRestrictedContext 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en android.app.ActivityThread.handleReceiver (ActivityThread.java:2821) 09-10 22 : 01: 55.283: ERROR / AndroidRuntime (30060): en android.app.ActivityThread.access $ 3200 (ActivityThread.java:125) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2083) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en android.os.Handler.dispatchMessage (Handler.java:99) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): en android.os.Looper.loop (Looper.java:123) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en android.app.ActivityThread.main (ActivityThread. Java: 4627) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en java.lang.refle Ct.Method.invokeNative (Método nativo) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en java.lang.reflect.Method.invoke (Method.java:521) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en com.android. Internal.os.ZygoteInit.main (ZygoteInit.java:616) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en dalvik.system.NativeStart.main (Native Method) 09-10 22: 01: 55.283 : ERROR / AndroidRuntime (30060): Causado por: java.lang.ClassCastException: android.app.ReceiverRestrictedContext 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en com.example.test.HomeWidget.onUpdate (HomeWidget .java: 37) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060): en android.appwidget.AppWidgetProvider.onReceive (AppWidgetProvider.java:61) 09-10 22: 01: 55.283: ERROR / AndroidRuntime (30060) ): En android.app.ActivityThread.handleReceiver (ActivityThread.java:2810) 09-10 22: 01: 55.283: ERROR / AndroidRun Tiempo (30060): … 10 más
- Cómo reanudar una descarga interrumpida - parte 2
- Un patrón de diseño para evitar múltiples ifs
- String.equals () con varias condiciones (y una acción en el resultado)
- Autenticación de Microsoft ISA Server en Android
- Programación de Android m antes de los objetos
- ¿Por qué super.onDestroy () en java - Android va en la parte superior en los destructores?
- Cómo enviar mensajes de texto en android vía sip
- Cómo deshabilitar el elemento ListView después de que se ha hecho clic?
LinearLayout layoutParams = item.getLayoutParams(); layoutParams.setMargins(10, 50, 4, 5); item.setLayoutParams(layoutParams);
De alguna manera crear nuevos LayoutParams siempre causa ese error. Creo que quedan algunos campos sin configurar. Sólo copie los existentes.
Como ya he dicho en los comentarios, estás intentando darle context
a Activity
. Este contexto no es Activity
. Desde AppWidgetProvider.onReceive()
:
context
Context
en el que se está ejecutando el receptor.
Además, no puedes acceder a una Activity
desde un widget.
Si desea llamar a una Activity
de un widget, debe registrar un BroadcastReceiver
en esta Activity
y llamarla utilizando Context.sendBroadcast()
.
EDIT : Y si desea configurar LayoutParams
para RemoteViews
, es mejor hacerlo en XML.
Tengo un método para cambiar el margen inferior de cualquier vista para cualquier cantidad de píxeles. Puede seguir adelante y hacer que sea un poco más genérico para los márgenes superior, derecho e izquierdo también.
private static void adjustViewHeight(int resID, int pixels, Activity activity){ ((FrameLayout.LayoutParams)activity.findViewById(resID).getLayoutParams()).bottomMargin = pixels; activity.findViewById(resID).invalidate(); activity.findViewById(resID).requestLayout(); }
Espero que esto ayude,
Siciano