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

我有一个 Android应用程序小部件,我想扩展它以支持几种尺寸,并且还可以重新调整大小.

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

如何阅读应用小部件大小?

我找不到任何东西.

解决方法

我知道这是一个老问题,但有一个更新的答案(我认为当时没有,因为它只是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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...