我似乎找不到关于我要编写的小部件以下问题的任何信息: 除了在Android 3.1引入的可调整大小功能外,我希望我的小部件可以在LauncherPro或ADWLauncher等自定义启动器中调整大小。我能否定义我的小部件在调整大小后如何更改其布局?例如,按钮A在2x1上显示在左侧,但在3x3上显示在右侧。 此外,当由于屏幕旋转小部件大小发生变化时(例如,3x1在横向和纵向上具有不同的高度和宽度),我也希望它能够更改其外观/布局。
任何提示都将很有帮助。 非常感谢! 蒂尔
我似乎找不到关于我要编写的小部件以下问题的任何信息: 除了在Android 3.1引入的可调整大小功能外,我希望我的小部件可以在LauncherPro或ADWLauncher等自定义启动器中调整大小。我能否定义我的小部件在调整大小后如何更改其布局?例如,按钮A在2x1上显示在左侧,但在3x3上显示在右侧。 此外,当由于屏幕旋转小部件大小发生变化时(例如,3x1在横向和纵向上具有不同的高度和宽度),我也希望它能够更改其外观/布局。
任何提示都将很有帮助。 非常感谢! 蒂尔
从Android 4.1开始,可以使用onAppWidgetOptionsChanged()方法来获取小部件在调整大小时的尺寸并更改布局。因此,在您的AppWidgetProvider中:
@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle bundle) {
int minWidth = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int maxWidth = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
int minHeight = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
int maxHeight = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
RemoteViews rv = null;
//Size of a 2x1 widget on a Nexus 4 (other screen densities will differ)
if(minWidth == 152 && maxWidth == 196 && minHeight == 58 && maxHeight == 84){
rv = new RemoteViews(context.getPackageName(), R.layout.widget2x1);
} else {
rv = new RemoteViews(context.getPackageName(), R.layout.widget);
}
...
/* Set some stuff in your layout here */
...
appWidgetManager.updateAppWidget(appWidgetId, rv);
}
问题在于您需要找到每个屏幕密度/大小的最小/最大宽度和高度,以便知道当小部件调整大小一定量以保证布局更改时。