android - 如何获取应用程序小部件的大小?

标签 android resize size android-appwidget

我有一个 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);
  }
}

关于android - 如何获取应用程序小部件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984834/

相关文章:

android - 如何将 FusedLocationProviderClient 实现为服务?

javascript - 在布局*之前*对窗口调整大小事件使用react

C# 简单图像调整大小 : File Size Not Shrinking

android - 为什么 SQLiteDatabase 的 getMaximumSize() 方法返回 1 TB?

android - 为 Gradle 和 Cordova 5 指定签名配置

java - Android自动SQL插入

java - GridView 项目剪裁和不同的高度

html - 媒体查询不会调整字段集和按钮的大小

java - JFrame 大小应减少桌面的最大可用大小

c++ - 如何在 C++ 中找出内存中变量名称的大小?