Как получить размер виджета приложения? - PullRequest
7 голосов
/ 08 августа 2011

У меня есть виджет приложения Android, и я хотел бы расширить его для поддержки нескольких размеров, а также изменить его размер с помощью Honeycomb.

Проблема в том, что мне нужно знать, каков размер виджета, чтобы я мог знать, сколько контента я могу в него поместить.

Как узнать размер виджета приложения?

Я ничего не смог найти.

1 Ответ

15 голосов
/ 25 апреля 2014

Я знаю, что это старый вопрос, но есть новый ответ на него (который, я считаю, не был доступен в то время, так как это только API 16 и выше):

вы можете позвонить:

Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);

, который даст те же параметры, которые передаются вашему получателю во время

public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions)

. С этими параметрами Bundle вы можете запросить размер с помощью констант:

AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT
AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH
AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT
AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH

Помните, что Samsung любит быть разными, поэтому вам, вероятно, понадобится специальный обработчик для TouchWiz (код ниже скопирован прямо из моего приложения):

@Override
public void onReceive(Context context, Intent intent) {
  if (intent == null || intent.getAction() == null)
     return;
  // I FUCKING HATE SAMSUNG!
  if (intent.getAction().contentEquals("com.sec.android.widgetapp.APPWIDGET_RESIZE") &&
     Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
     handleTouchWiz(context, intent);
  }
  super.onReceive(context, intent);
}

@TargetApi(16)
private void handleTouchWiz(Context context, Intent intent) {
  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

  int appWidgetId = intent.getIntExtra("widgetId", 0);
  int widgetSpanX = intent.getIntExtra("widgetspanx", 0);
  int widgetSpanY = intent.getIntExtra("widgetspany", 0);

  if (appWidgetId > 0 && widgetSpanX > 0 && widgetSpanY > 0) {
     Bundle newOptions = new Bundle();
     // We have to convert these numbers for future use
     newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, widgetSpanY * 74);
     newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, widgetSpanX * 74);

     onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
  }
}
...