程序启动图标(各个屏幕的logo尺寸要求):
Android Icon Size and Location for Apps:
DENSITY | SIZE | LOCATION | RATIO | SCREEN | MARGIN |
XXXHDPI | 192×192 | drawable-xxxhdpi | 4 | 640 DPI | 12 to 16 pixels |
XXHDPI | 144×144 | drawable-xxhdpi | 3 | 480 DPI | 8 to 12 pixels |
XHDPI | 96×96 | drawable-xhdpi | 2 | 320 DPI | 6 to 8 pixels |
HDPI | 72×72 | drawable-hdpi | 1.5 | 240 DPI | 4 to 6 pixels |
MDPI | 48×48 | drawable-mdpi | 1 | 160 DPI | 3 to 4 pixels |
MDPI | 48×48 | drawable (Cupcake) | 1 | 160 DPI | 3 to 4 pixels |
LDPI | 36×36 | drawable-ldpi | 0.75 | 120 DPI | 2 to 3 pixels |
NA | 512×512 | Google Play | NA | NA | As required |
获取手机屏幕分辨率信息
public static float PIXEL_DENSITY = 0.0f;
public static int PIXEL_HEIGHT;
public static int PIXEL_WIDTH;
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
PIXEL_DENSITY = metrics.density;
PIXEL_HEIGHT = metrics.heightPixels;
PIXEL_WIDTH = metrics.widthPixels ;
Android Drawable切图制作标准
屏幕密度级别
屏幕密度 dpi: 每英寸像素数
low:medium:high:extra-high:extra-extra-high=3:4:6:8:12
ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi,xxhdpi是480dpi
手机常见分辨率
4:03 | 5:03 | 16:09 |
VGA 640*480 (Video Graphics Array) | WVGA 800*480 (Wide VGA) | FWVGA 854*480 (Full Wide VGA) |
QVGA 320*240 (Quarter VGA) | HD 1920*1080 High Definition | |
HVGA 480*320 (Half-size VGA) | QHD 960*540 | |
SVGA 800*600 (Super VGA) | 720p 1280*720 标清 | |
1080p 1920*1080 高清 | ||
分辨率对应DPI(制作切图请参考下面的后5项制作)
ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
QVGA 240x320 | HVGA 480*320 | WVGA 800*480 | 720P 1280x720 | 1080P 1920x1080 | 1440x2560 |
FWVGA 480x854 | 1184x720 | ||||
QHD 960*540 | |||||
常用手机的分辨率
iphone 4/4s 960*640 (3:2)
iphone5 1136*640
小米1 854*480(FWVGA)
小米2 1280*720
Android Density(密度)
什么是density
density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小,通常
屏幕实际分辨率为240px*400px时,density=120
屏幕实际分辨率为320px*533px,density=160
屏幕实际分辨率为480px*800px,density=240
资源单位(xml文件中定义大小的单位)
dp=dip=dx (Density independent pixel)
基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。px
px指软件的单位点,设备相关的点
布局时尽量使用单位dip,少使用px。若使用px,如果设某控件大小400x400px,在800x480上显示正常,而在533x320的屏上就超出屏幕了。若使用dp,如果设某控件大小为160x160dp,就可以通过从系统中取density来算出真正的大小,比如在800x480屏的density设为240,而533x320屏的density设为160,借以下公式计算:
pixels = dips * (density / 160)
在800x480在屏中显示240象素,而在533x320的屏中显示为160象素,控件在屏中显示的比例是一样的。
取得屏幕信息(宽高等)
public static String getDisplayMetrics(Context cx) {
String str = "";
DisplayMetrics dm = new DisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
float density = dm.density;
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";
str += "The absolute heightin:" + String.valueOf(screenHeight)
+ "pixels\n";
str += "The logical density of the display.:" + String.valueOf(density)
+ "\n";
str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";
str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";
return str;
}
取得状态栏和标题栏高度
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_test2);
tv1 = (TextView) findViewById(R.id.TextView01);
tv1.post(new Runnable(){
public void run()
{
processLayout();
}
});
}
private void processLayout(){
Rect rect= new Rect();
Window window= getWindow();
tv1.getWindowVisibleDisplayFrame(rect);
//状态栏高度
int statusBarHeight= rect.top;
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
//标题栏高度
int titleBarHeight= contentViewTop - statusBarHeight;
Log.v("test", "statusBarHeight="+statusBarHeight+
" contentViewTop="+contentViewTop+
" titleBarHeight="+titleBarHeight);
}