安卓手机APK屏幕适配总结

一.屏幕实际宽度、高度、像素密度的获取

public static String getDisplayMetrics(Context cx) { 

      String str = ""; 
      DisplayMetrics dm = new DisplayMetrics(); 
      //取得DisplayMetrics对象方法一
        //dm = cx.getApplicationContext().getResources().getDisplayMetrics(); 
      //取得DisplayMetrics对象方法二
      ((Activity)cx).getWindowManager().getDefaultDisplay().getMetrics(dm);
      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; 

   


WindowManager windowManager = getWindowManager();


        Display display = windowManager.getDefaultDisplay();


        mDisplayWidth = display.getWidth();


        mDisplayHeight = display.getHeight();

二、计算像素密度

参考:http://www.2cto.com/kf/201504/391287.html

<code>手机型号:G700
手机分辨率: 1280 * 720 (注:手机两个直角边上分别放置了 1280 720 个像素点)
手机尺寸大小: 5 英寸(手机斜边长度)
 
假设a,b分别为两个直角边,c为斜边,由勾股定理可得出计算方式:sqrt(a*a+b*b)/c
计算结果:sqrt( 1280 * 1280 + 720 * 720 )/ 5 293 .72dpi
 
根据google官方文档说明得出,当前手机最接近320dpi,则将其归纳在xhdpi手机范围内,即1dp=2px;
</code>
<code>手机型号:模拟器
手机分辨率: 800 * 480 (注:手机两个直角边上分别放置了 800 480 个像素点)
手机尺寸大小: 3.7 英寸(手机斜边大小)
 
计算结果:sqrt( 800 * 800 + 480 * 480 )/ 3.7 252 .15dpi
根据google官方文档(图 1 - 1 )得出,当前手机接近240dpi,则将其归纳在hdpi手机范围内,即1dp= 1 .5px。
 
参照以上方式可将市场上大多数手机划分为 5 个像素密度等级,分别为:
ldpi:120dpi,像素密度与dp转换关系为:1dp = 0 .75px
mdpi:160dpi ,像素密度与dp转换关系为:1dp = 1px
hdpi:240dpi,像素密度与dp转换关系为:1dp = 1 .5px
xhdpi:320dpi,像素密度与dp转换关系为:1dp = 2px
xxhdpi:480dpi,像素密度与dp转换关系为:1dp = 3px
</code>

适配方法一:
不同密度的手机加载不同drawable下的图片:drawable-hdpi、drawable-ldpi、drawable-mdp……放不同像素点的图片
适配方法二:
加载放在不同的value文件夹下的dimen:res/value-800x480、res/value-1280x720等
适配方法三:
加载不同布局,res/layout-800x480、res/layout-1280x720
适配方法四:
java代码适配:
TextView tv  = (TextView) findViewById(R.id.tv);
    //获取封装当前手机屏幕信息对象,用于存放宽高值
    DisplayMetrics metrics  = new DisplayMetrics();
    //给当前屏幕设置宽高
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    //获取高度
    Constant.srceenHeight = metrics.heightPixels;
    //获取宽度
    Constant.srceenWidth = metrics.widthPixels;
 
    Log.i(tag, "Constant.srceenHeight = "+Constant.srceenHeight);
    Log.i(tag, "Constant.srceenWidth = "+Constant.srceenWidth);
 
    //宽高各占50%
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
            (int)(Constant.srceenWidth*0.5+0.5), 
            (int)(Constant.srceenHeight*0.5+0.5));
    tv.setLayoutParams(layoutParams);

适配方法五:
权重适配,与layout_width设置想相关


在manifest中配置屏幕要求:

<supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />


关于屏幕适配写的很好:http://blog.csdn.net/jiangwei0910410003/article/details/40509571

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值