Cambiar el tamaño del widget de Android
Estoy construyendo un widget para mi aplicación de Android que tendrá varios botones en él. Según el tamaño del widget, quiero que la cantidad de botones del widget crezca y se reduzca. Esto es lo que parece actualmente en una vista 4×1:
Y cuando se reduce a 3×1:
- Integración de mi widget con mi aplicación
- Visualización de la actividad con animación personalizada
- Pintura a mano libre no funciona correctamente?
- AlarmManager Bug mientras se restablece / cancela la alarma en el cambio de fecha y hora
- Registrar BroadcastReceiver to Widget (Diferencia de objeto de contexto)
¿Hay de todos modos para ocultar dinámicamente el botón 4 en la vista 3×1 para que los otros 3 botones no se aplastado? Lo mismo sería para un 2×1 o un 1×1. ¡Cualquier entrada en esto sería apreciada grandemente!
¡Gracias!
- Entrada de números de Android con signo más y menos
- ¿Por qué no se actualiza mi widget de aplicación en API 3 o 4?
- Eraser en Android
- Mostrar cuadro de diálogo casi pantalla completa en mi caso (con ActionBar y superposición)
- cómo hacer que las columnas en la distribución de la tabla se distribuyan uniformemente, aprovechando al máximo el espacio disponible
- Android ListView en el widget onClick no funciona
- Cómo mantener el tiempo de espera de sesión en la aplicación Android
- Cómo implementar un ListView con fastscroll y albhabet indexador
Como se sugirió, no tienes otra manera que implementar onAppWidgetOptionsChanged
en tu proveedor de widgets. Los usuarios de API <16 no tendrán esta función por desgracia.
Con el fin de ocultar los botones cuando se reduce el widget, el widget debe comportarse de forma similar al widget de tiempo dado como ejemplo en el sitio de diseño de Android, bajo el patrón " Widgets " (appwidgets en realidad). Se muestran menos botones a medida que se reduce el widget, más botones a medida que crece, configurando la visibilidad de los botones.
En onAppWidgetOptionsChanged
, utilizando los valores dados por el nuevoOptions Bundle, debe detectar la variación de anchura y altura y establecer tamaños de cubos como se indica en los documentos (desde la misma página de diseño):
De hecho, a medida que el usuario cambia el tamaño de un widget, el sistema responderá con un rango de tamaño dp en el que el widget puede volver a dibujarse. Planificar la estrategia de cambio de tamaño de widget a través de "cubos de tamaño" en lugar de dimensiones de cuadrícula variable le dará los resultados más fiables.
Lo que realmente es un desafío es cómo determinar esos cubos . El paquete newOptions tiene valores de min_width, min_height, max_width y max_height que difieren sustancialmente entre dispositivos, densidades de pantalla, lanzadores, etc. Desafortunadamente, el equipo de Android no nos mostró cómo hacerlo, y hay pocos ejemplos de código de onAppWidgetOptionsChanged
en la web, La mayoría de ellos muy simple.
Desde la versión 4.1 (api nivel 16) hay una nueva función getAppWidgetOptions () que devuelve un Bundle con algunos parámetros de tamaño. Vea aquí . Tal vez usted puede usar eso para lo que necesita, pero afaik no hay ninguna opción similar para las versiones por debajo de 4.1.
Como ya dijeron. Puede utilizar onAppWidgetOptionsChanged
Así que mi proposición es
1) Hacer diseños diferentes. Con 3 y 4 botones.
2) Cambiar la base de diseño en el recuento de columnas de widgets.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { // See the dimensions and Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); // Get min width and height. int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT); // Obtain appropriate widget and update it. appWidgetManager.updateAppWidget(appWidgetId, getRemoteViews(context, minWidth, minHeight)); super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); } /** * Determine appropriate view based on row or column provided. * * @param minWidth * @param minHeight * @return */ private RemoteViews getRemoteViews(Context context, int minWidth, int minHeight) { // First find out rows and columns based on width provided. int rows = getCellsForSize(minHeight); int columns = getCellsForSize(minWidth); // Now you changing layout base on you column count // In this code from 1 column to 4 // you can make code for more columns on your own. switch (column) { case 1: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_1column); case 2: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_2column); case 3: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_3column); case 4: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_4column); default: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_4column); } } /** * Returns number of cells needed for given size of the widget. * * @param size Widget size in dp. * @return Size in number of cells. */ private static int getCellsForSize(int size) { int n = 2; while (70 * n - 30 < size) { ++n; } return n - 1; }
Puede intentar escuchar la devolución de llamada onAppWidgetOptionsChanged : que debe activarse cada vez que cambia el tamaño del diseño. Sin embargo, realmente no hay manera que he visto (ahora mismo) para determinar la cantidad real de bienes raíces de pantalla de su widget está tomando, por lo que no hay una buena manera de cambiar la visibilidad del botón basado en el tamaño.
- Sólo un botón de radio seleccionado a la vez
- Android Support4Demos – API 4+ Soporte Demos proyecto completo