我有一个Android应用程序小部件,我希望将其扩展为支持多种大小,并且在Honeycomb上可以重新调整大小。
问题是我需要知道小部件的大小,以便我知道可以放置多少内容。
我该如何读取应用程序小部件的大小?
我找不到任何相关信息。
我有一个Android应用程序小部件,我希望将其扩展为支持多种大小,并且在Honeycomb上可以重新调整大小。
问题是我需要知道小部件的大小,以便我知道可以放置多少内容。
我该如何读取应用程序小部件的大小?
我找不到任何相关信息。
我知道这是一个老问题,但现在有一个更新的答案(我认为它在当时还不可用,因为它仅适用于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
记住三星喜欢与众不同,所以您可能需要一个专门为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);
}
}
handleTouchWiz
函数是从其他SO答案中直接复制的,我不知道它的来源。 - Budius