Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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,如何获取小部件的像素大小 public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { int minW_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); int maxW_dp = newOption

如何获取小部件的像素大小

public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions)
{
    int minW_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
    int maxW_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
    int minH_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
    int maxH_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
    int minW = dpToPx(minW_dp, context);
    int maxW = dpToPx(maxW_dp, context);
    int minH = dpToPx(minH_dp, context);
    int maxH = dpToPx(maxH_dp, context);
    bitmap = Bitmap.createBitmap(minW, maxH, Config.ARGB_8888);
}

public static int dpToPx(int dp, Context context)
{
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));       
    return px;
}
我正在使用Note 3智能手机,我拍摄了屏幕截图并手动计算,应该是
1020px 316px
(+-5px),4x1widget(可调整大小)

我尝试了下面的代码,但得到了错误的结果:
minW_dp=324dp,maxW_dp=439dp,minH_dp=69dp,maxH_dp=88dp。
minW=782px,maxW=1060px,minH=167px,maxH=213px。

如何获得小部件的实际大小(以像素为单位)

public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions)
{
    int minW_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
    int maxW_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
    int minH_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
    int maxH_dp = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
    int minW = dpToPx(minW_dp, context);
    int maxW = dpToPx(maxW_dp, context);
    int minH = dpToPx(minH_dp, context);
    int maxH = dpToPx(maxH_dp, context);
    bitmap = Bitmap.createBitmap(minW, maxH, Config.ARGB_8888);
}

public static int dpToPx(int dp, Context context)
{
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));       
    return px;
}

您的
dpToPx
计算错误。您需要将其从以下位置更改:

int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));

如果你读了这本书,就会明白为什么你的计算不起作用。(注意:DisplayMetrics.xdpi似乎在某些设备上也出现了问题,请参阅)
以下是displayMetrics.xdpi所代表的内容:

X维度中屏幕每英寸的精确物理像素数

但你不想得到屏幕上每英寸的像素数。你想得到比例因子,这就是displayMetrics.density发挥作用的地方:

显示器的逻辑密度。这是一个的比例因子 与密度无关的像素单元,其中一次倾斜是一个 大约160 dpi屏幕(例如240x320,1.5“x2”屏幕), 提供系统显示的基线。因此在160dpi上 屏幕该密度值将为1120 dpi屏幕上 .75;等等

注:注3为xxhdpi装置,因此其比例因数为3.0(480dpi)

编辑 计算dp->px的另一种方法:

(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, maxH_dp, context.getResources().getDisplayMetrics());

感谢您的回答,更改了dpToPx计算,但我仍然无法获得~1020x316。我得到:minW=972px,maxW=1317px,minH=207px,maxH=264px。为什么?嗯,奇怪。您确定手动测量的px正确吗?我的意思是这是一个非常简单的计算,你也可以自己做。(dp*3.0)图片:。它大约是1020x313,很难说准确,因为边缘很模糊。只要检查一下这个,你的测量看起来很好。我只是深入挖掘了一下,似乎密度值不是显示器的实际密度,而是操作系统使用的密度。请参阅我的编辑,以获得计算正确px的其他方法,也许这会起作用。我使用dp->px获得的值与第一条注释中的值完全相同。