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: Widget 4x1

Y cuando se reduce a 3×1: 3x1

¿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!

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.

Introduzca aquí la descripción de la imagen

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.

  • Gráficos basados ​​en XML versus png drawables?
  • Tamaño de la tostada en Galaxy Nexus
  • Android - Tabs, MapView, actividades dentro de las pestañas
  • Android Cambiar hilandero color pulsado Luz Holo tema
  • Cómo implementar correctamente onRestoreInstanceState () para una subclase DialogPreference?
  • ¿Cómo mostrar un diseño encima del otro programmatically en mi caso?
  • Los widgets que se pueden hacer clic en Android
  • ¿Qué android: inputType debo usar para ingresar una dirección IP?
  • Comportamiento extraño de ListView con CheckBox
  • ¿Cómo iniciar una actividad que se define en un paquete diferente de un widget?
  • Selector de fecha y hora en una vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.