如何将UI小部件维度从iPhone4Retina更改为Android 预期结果
我有一些UI小部件,它们的尺寸是为iPhone4Retina设备设计的。该单位以像素为单位,例如,按钮宽30像素,高30像素。我想把设计风格复制到Android设备上,比如说之前的30乘30按钮,占iPhone 4视网膜屏幕宽度的30/640=4.6875%,占屏幕高度的30/960=9.375%,那么我预计它也占Android设备屏幕宽度的4.6875%,占屏幕高度的9.375% 问题 不知道以下代码中使用的iPhone4视网膜设备的尺寸比例因子 代码 参考文献 iPhone 4视网膜 生产者价格指数:326 分辨率:640 x 960像素 大小比例因子:未知 三星Galaxy S 生产者价格指数:233 分辨率:480 x 800像素 尺寸比例系数:1.5 三星Galaxy Note 生产者价格指数:285 分辨率:800 x 1280像素如何将UI小部件维度从iPhone4Retina更改为Android 预期结果,android,ios,user-interface,multiscreen,Android,Ios,User Interface,Multiscreen,我有一些UI小部件,它们的尺寸是为iPhone4Retina设备设计的。该单位以像素为单位,例如,按钮宽30像素,高30像素。我想把设计风格复制到Android设备上,比如说之前的30乘30按钮,占iPhone 4视网膜屏幕宽度的30/640=4.6875%,占屏幕高度的30/960=9.375%,那么我预计它也占Android设备屏幕宽度的4.6875%,占屏幕高度的9.375% 问题 不知道以下代码中使用的iPhone4视网膜设备的尺寸比例因子 代码 参考文献 iPhone 4视网膜 生产者
大小比例因子:2 有几种观点值得考虑。 但我只是遵循一个简单的方法: px->dp 我的图像资源位于xhdpi文件夹中,使用iphone的图像 假设在ios中有一个像素值,例如10 如果您想获得android设备的像素值:
DisplayMetrics dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
SCREEN_DENSITY = dm.density;
SCREEN_WIDTH_DP = (int) (SCREEN_WIDTH_PIXELS / dm.density);
public static int getScaledWidthPixelsByDP(int desingDP) {
double v = desingDP / 320f * SCREEN_WIDTH_PIXELS;
return (int) v;
}
假设iPhone4Retina版本的大小比例因子为2.0(Android中的xhdpi),我做了一个非常简单的解决方法,只需使用dp单位将这些像素值的一半赋予它们。所以30pxby30px按钮在xml文件中变成了15dpby15dp。看起来不错,可以在谷歌Nexus、三星Galaxy S、S2、S4、Note、Note2上使用。不使用dp2px和px2dp方法。期望Android设备上的宽度/高度百分比相同,这意味着您假设所有设备具有相同的屏幕宽高比。事实并非如此,因此不会有一对一的映射。无论如何,326 ppi意味着
xhdpi
,或与注释相同的2.0
比例因子(以mdpi
为基线)。另请阅读:。您对iPhone 4 Retina使用320f,这意味着它的比例因子为2.0?Retina没有精确的比例iPhone~2.0左右,如果这对您有帮助,我将非常高兴!
DisplayMetrics dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
SCREEN_DENSITY = dm.density;
SCREEN_WIDTH_DP = (int) (SCREEN_WIDTH_PIXELS / dm.density);
public static int getScaledWidthPixelsByDP(int desingDP) {
double v = desingDP / 320f * SCREEN_WIDTH_PIXELS;
return (int) v;
}