Динамическая настройка содержимого и макета виджета до размера, определяемого пользователем путем изменения размера. Android

В руководстве по шаблонам дизайна Android говорится, что содержание и макет виджета могут быть динамически скорректированы с учетом размера пользователя, определенного с помощью операции изменения размера: Руководство по дизайну для виджетов

Пример, приведенный в руководстве по проектированию: Пример изображения приведен в руководстве по проектированию.

Но я ничего не вижу в документах относительно того, как это сделать. Как изменить макет в соответствии с операцией изменения размера? Любые идеи относительно подхода будут оценены.

Solutions Collecting From Web of "Динамическая настройка содержимого и макета виджета до размера, определяемого пользователем путем изменения размера. Android"

Благодаря A-C это возможно для Jellybean и выше устройств и прост в реализации. Ниже приведен пример кода с использованием метода onAppWidgetOptionsChanged

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { Log.d(DEBUG_TAG, "Changed dimensions"); // 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 width 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); if (columns == 4) { // Get 4 column widget remote view and return } else { // Get appropriate remote view. return new RemoteViews(context.getPackageName(), R.layout.quick_add_widget_3_1); } } /** * 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; } 

@ Choktski @azendh

После изменения макетов некоторые события click больше не вызываются

Я решил эту проблему, создав функцию viewOnClickPendingIntent на представлении, а затем вернул ее.

Например, код похож на

 private RemoteViews getConfiguredView (RemoteViews remoteViews, Context context){ Intent refreshIntent = new Intent(context, EarningsWidget.class); refreshIntent.setAction(REFRESH_ACTION); PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 3, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.refreshButton, toastPendingIntent); return remoteViews; } 

И чем называется функция, вы должны «Получить соответствующий удаленный просмотр».

 return getConfiguredView(new RemoteViews(context.getPackageName(), R.layout.activity_widget), context);