2015-10-30-Android手机屏幕相关知识点

程序启动图标(各个屏幕的logo尺寸要求):

Android Icon Size and Location for Apps:

DENSITYSIZELOCATIONRATIOSCREENMARGIN
XXXHDPI192×192drawable-xxxhdpi4640 DPI12 to 16 pixels
XXHDPI144×144drawable-xxhdpi3480 DPI8 to 12 pixels
XHDPI96×96drawable-xhdpi2320 DPI6 to 8 pixels
HDPI72×72drawable-hdpi1.5240 DPI4 to 6 pixels
MDPI48×48drawable-mdpi1160 DPI3 to 4 pixels
MDPI48×48drawable (Cupcake)1160 DPI3 to 4 pixels
LDPI36×36drawable-ldpi0.75120 DPI2 to 3 pixels
NA512×512Google PlayNANAAs 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:035:0316: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项制作)

ldpimdpihdpixhdpixxhdpixxxhdpi
QVGA 240x320HVGA 480*320WVGA 800*480720P 1280x7201080P 1920x10801440x2560
FWVGA 480x8541184x720
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);    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值