我正在为Android创建一个应用程序小部件,由于它是由图形等自定义元素组成的,因此必须呈现为位图.
但是,我在这个过程中遇到了一些障碍.
1)有没有办法找到app小部件的最大可用空间?(或者:是否可以针对WVGA(或类似的宽)情况下的最小可用空间正确计算尺寸?
我不知道如何计算app小部件的最大可用空间.使用传统的app小部件,可以使用fill_parent,并且将使用所有空间.但是,将窗口小部件渲染为位图并避免拉伸时,必须计算正确的尺寸.文档概述了如何计算最小尺寸,但对于诸如WVGA之类的情况,横向模式中将存在未使用的空间 - 导致窗口小部件看起来比其他自然伸展的窗口小部件更短.
float density = getResources().getDisplayMetrics().density;
int cx = ((int)Math.ceil(appWidgetInfo.minWidth / density) + 2) / 74;
int cy = ((int)Math.ceil(appWidgetInfo.minHeight / density) + 2) / 74;
int portraitWidth = (int)Math.round((80.0f * cx - 2.0f) * density);
int portraitHeight = (int)Math.round((100.0f * cy - 2.0f) * density);
int landscapeWidth = (int)Math.round((106.0f * cx - 2.0f) * density);
int landscapeHeight = (int)Math.round((74.0f * cy - 2.0f) * density);
Run Code Online (Sandbox Code Playgroud)
计算cx和cy给出水平和垂直单元格的数量.从计算的dpi减去-2(例如74*cy - 2)是为了避免产生的像素数向下舍入的情况.(例如,在Nexus One的横向模式下,高度为110,而不是111(74*1.5).
2)将位图分配给ImageView(用作RemoteViews的一部分)以查看图像时,有两种方法:
2.1)通过使用setImageViewUri,并将位图保存为PNG文件.然后使用ContentProvider中的openFile()实现提供映像:
@Override
public ParcelFileDescriptor …Run Code Online (Sandbox Code Playgroud)