Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可以定义小部件';在第三方启动器中改变大小和方向的行为/布局?_Android_Android Widget - Fatal编程技术网

Android 可以定义小部件';在第三方启动器中改变大小和方向的行为/布局?

Android 可以定义小部件';在第三方启动器中改变大小和方向的行为/布局?,android,android-widget,Android,Android Widget,我似乎找不到关于我要编写的小部件的以下问题的任何信息: 除了安卓3.1中引入的调整大小功能外,我还希望我的小部件能够在自定义启动器(如LauncherPro或ADWLauncher)中调整大小。有没有一种方法可以定义小部件在调整大小后如何更改其布局?例如,按钮A显示在左侧表示2x1,但显示在右侧表示3x3。 此外,我希望它在由于屏幕旋转而改变小部件大小时改变其外观/布局(例如,3x1在横向和纵向上具有不同的高度和宽度) 任何提示都会有帮助。 谢谢! 直到 有没有一种方法可以定义小部件在调整大小后

我似乎找不到关于我要编写的小部件的以下问题的任何信息: 除了安卓3.1中引入的调整大小功能外,我还希望我的小部件能够在自定义启动器(如LauncherPro或ADWLauncher)中调整大小。有没有一种方法可以定义小部件在调整大小后如何更改其布局?例如,按钮A显示在左侧表示2x1,但显示在右侧表示3x3。 此外,我希望它在由于屏幕旋转而改变小部件大小时改变其外观/布局(例如,3x1在横向和纵向上具有不同的高度和宽度)

任何提示都会有帮助。 谢谢! 直到

有没有一种方法可以定义小部件在调整大小后如何更改其布局

您的应用程序小部件在调整大小后不会更改其布局

例如,按钮A显示在左侧表示2x1,但显示在右侧表示3x3

这不是可调整大小的应用程序小部件的目的。调整大小是为了使用
ListView
GridView
等,这将占用额外的可滚动空间

此外,我希望它在由于屏幕旋转而改变小部件大小时改变其外观/布局(例如,3x1在横向和纵向上具有不同的高度和宽度)


为此,您应该能够使用标准的方向资源集(例如,
res/layout/
res/layout land/
)。

从Android 4.1开始,可以使用OnAppWidgetOptions Changed()在调整大小和更改布局时查找小部件的大小。因此,在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);
}

问题是,您需要找到每个屏幕密度/大小的最小/最大宽度和高度,以便知道小部件何时调整到一定大小以保证布局更改

谢谢你的快速回复。因此,根据小部件的大小在小部件中具有不同的(-ly structured)元素的唯一方法是根据用户在小部件安装时的大小选择所需的布局(例如winamp小部件,包括4x2相册艺术,而不是4x1相册艺术)。为了在第三方发射器中适当地调整飞行大小,我唯一可以考虑的是避免固定宽度和高度值,这样组件就可以真正吸收额外的空间了。@到:这是一个很好的位置。但我发现至少有一个例子可以做到这一点:三星的“Accuweather.com”小部件预先安装在Galaxy s II上,Galaxy Tab 7..0 Plus,Galaxy Note,我确信还有其他一些。当你调整小部件的大小时,它将改变它的布局。@christoff:除非它在第三方主屏幕上表现出相同的行为,否则你看到的可能是伪应用程序小部件和三星主屏幕之间的专有内容。主屏幕的实现者可以创建“应用程序小部件”,它们不是真正的应用程序小部件,而是主屏幕应用程序本身的功能,并且可以做各种额外的事情。@commonware是有意义的,因为在进一步检查后,三星启用了在<3.0的设备上调整大小的功能,这些设备必须内置在启动器中。感谢您的回答,但请注意,选项_APPWIDGET*的值是以dp为单位报告的。也就是说,没有您提到的密度问题。您应该定义间隔,而不是使用==运算符。这将使您的布局选择在不同的主屏幕之间更加可靠。