Как получить размер виджета приложения?
У меня есть виджет приложения для Android, и я хотел бы расширить его для поддержки нескольких размеров, а также повторно с сотами.
проблема в том , что мне нужно знать, какой размер виджета, чтобы я мог знать, сколько контента я могу поместить в него.
Как я могу прочитать размер виджета приложения?
Я ничего не мог найти.
1 ответов
Я знаю, что это старый вопрос, но есть более новый ответ на него (который, я считаю, не был доступен в то время, так как это 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);
}
}