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上 屏幕该密度值将为1在120 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获得的值与第一条注释中的值完全相同。