2011-08-08 136 views
7

我有一个Android应用程序小部件,我想将其扩展为支持多种尺寸,并且可以通过Honeycomb重新调整大小。如何获取应用部件大小?

问题是我需要知道小部件的大小,所以我可以知道我可以放入多少内容。

如何读取应用程序的小部件大小?我找不到任何东西。

回答

13

我知道这是老问题,但有给它一个新的答案(我认为是不可用的时间,因为它是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); 
    } 
} 
+1

你是怎么想出widgetSpan * 74?只是试验和错误?你知道max_height的majic数吗? – schwiz

+0

对不起'handleTouchWiz'直接从其他一些SO答案复制。我不知道,它来自哪里。 – Budius

+0

刚刚在Galaxy S6上测试过,意图从来没有收到过,但onAppWidgetOptionsChanged是用有效参数调用的,所以三星似乎已经解决了这个问题。 – user1806772

相关问题