Android 屏幕适配学习

一:Android 布局单位 dip  dp  sp  px 总结

在android的xml布局当中,经常会看到dip、dp、px、sp等单位,知道它们的作用才可以更加精确的布局UI。

dip:英文device independent pixels(设备独立像素)。所有的设备都有一个统一的dip大小(480*320),就是说,android的dip就是把屏幕的高分成了480个dip,宽分成了320个dip,每个dip在高中表示屏幕的1/480,在宽中表示屏幕的1/320。这样做的好处显而易见,我们可以使应用UI在不同大小的屏幕上都能正常的显示。

dp:完全等同于dip。

px:pixels,就是绝对像素。大小固定,不会随着屏幕不同而改变。

sp:scaled pixels,放大像素,主要用于字体显示,也是为了字体显示可以适应不同大小尺寸的屏幕。


二:

 

http://www.tuyiyi.com/ued/app/22438.html   Android适配UI文章


三:Android 屏幕常用介绍

传统意义上,一般是是这么认为的:

ldpi: 对应分辨率240×320

mdpi: 对应分辨率320×480

hdpi:对应分辨率480×800或480×854

 我们经常说的分辨率和ppi的关系,其实他们是没多大关系。分辨率只是说明屏幕上有多少个像素点,这也跟屏幕大小有关系。当然对于屏幕大小相同的来讲  分辨率越高 ppi越大,如果脱离了屏幕的物理尺寸谈分辨率是没有任何意义的。就像平板的分辨率比手机的大,那是因为平板个大呀。从颜色显示的细腻程度上讲并不见得比手机强。

但实际上没有这么简单,直接看官方资料的下标,可以看到其实ldpi一样由480×800,甚至还有1024×600

 低密度(ldpi 120)中密度(mdpi 160)高密度(hdpi 240)超高密度(320 xhdpi)
小屏幕QVGA (240×320) 480×640 
中屏幕WQVGA400 (240×400)
WQVGA432 (240×432)
HVGA (320×480)WVGA800 (480×800)
WVGA854 (480×854)
600×1024
640×960
大屏幕WVGA800** (480×800)
WVGA854** (480×854)
WVGA800* (480×800)
WVGA854* (480×854)
600×1024
  
超大屏幕1024×600WXGA (1280×800)
1024×768
1280×768
1536×1152
1920×1152
1920×1200

2048×1536
2560×1536
2560×




dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)
但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.
以下是这两个单位的概念:
px (pixels)像素 –一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web开发,页面基本都是使用像素作为单位的.
dip或dp (device independent pixels)设备独立像素 — 这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位
Android开发我们一般都可以不需要使用px的,但是某一些控件的属性没有直接支持dip,像下面的代码

  1. android.view.ViewGroup.LayoutParams.height
  2. android.view.ViewGroup.LayoutParams.width
复制代码
上面这两个属性的单位为像素,但是为了兼容多种 分辨率 的手机,我们需要最好使用dip,时候我们可以调用以下的代码进行转换.
  1. int heightPx= DisplayUtil.dip2px(this, 33);
  2. mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = heightPx;
复制代码


以上代码可以在我另一篇文章看得到.该功能是设置Tab的高度,单位是像素.以上的 单位转换 是为了支持多分辨率手机的.
该文章的地址 : [
  1. /**
  2. * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
  3. */
  4. public static int dip2px(Context context, float dpValue) {
  5. final float scale = context.getResources().getDisplayMetrics().density;
  6. return (int) (dpValue * scale + 0.5f);
  7. }

  8. /**
  9. * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
  10. */
  11. public static int px2dip(Context context, float pxValue) {
  12. final float scale = context.getResources().getDisplayMetrics().density;
  13. return (int) (pxValue / scale + 0.5f);
  14. }
复制代码


Android中将像素转换为sp/dp

代码与范例:

1
2
3
4
5
6
7
8
private static final float DIP = 16.0f;
 
// 将dip转换为pixel,将pixel转换为dip只需将算式进行逆运算即可
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixel = (int) (DIP * scale + 0.5f);
 
// 获取屏幕高度的像素值
getContext().getResources().getDisplayMetrics().heightPixels;

说明:将像素值与Android的尺寸单位dp转换。dp/sp的意义基本相同,都是与屏幕密度无关的尺寸单位,只不过前者用于字体尺寸以外的场合,而后者用于指定字体尺寸。在不同情况下,dp和sp所表示的尺寸会有些不同,这部分内容将在之后补充。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值