适配:即当前应用在相同的手机上面显示相同的效果。适配前需要首先确定当前手机所属像素密度类型(如:xhdpi、hdpi、mdpi等),然后计算其像素密度,按一定比例给出界面元素的布局位置和大小。

在android中,屏幕视频主要有以下几种方式:

  • 图片适配
  • dimens适配
  • 布局文件适配
  • java代码适配
  • 权重适配

案例一:

手机型号: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;

案例二:

手机型号:模拟器手机分辨率: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.75pxmdpi:160dpi ,像素密度与dp转换关系为:1dp = 1pxhdpi:240dpi,像素密度与dp转换关系为:1dp = 1.5pxxhdpi:320dpi,像素密度与dp转换关系为:1dp = 2pxxxhdpi:480dpi,像素密度与dp转换关系为:1dp = 3px


(注:以下案例就当前两款手机进行屏幕适配测试)

适配方式一:图片适配

不同像素密度的手机加载工程资源文件(res)中不同资源图片,以上述两款手机为例。布局代码如下:

    

G700(xhdpi):加载a.jpg资源文件,位于res/drawable-xhdpi文件夹下,显示效果如下:

模拟器(hdpi):加载a.jpg资源文件,位于res/drawable-hdpi文件夹下,显示效果如下:

适配方式二:dimens.xml文件适配

dimens.xml存在于工程资源(res)文件夹中不同values(如:value-1280x720、value-800x480)文件夹下,可用于指定控件大小,不同像素密度手机加载不同values文件夹下的dimens.xml文件,使用方式如下:

        

模拟器(hdpi):加载dimens.xml资源文件,位于res/value-800x480文件夹下

    160dp根据上述hdpi dp和px的转换关系1dp = 1.5px,则160dp = 240px,当前控件宽度应该位于屏幕中间位置。

G700(xhdpi):加载dimens.xml资源文件,位于res/value-1280x720文件夹下

    180dp根据上述xhdpi dp和px的转换关系1dp = 2px,则180dp = 360px,当前控件宽度应该位于屏幕中间位置。

G700(xhdpi)显示效果如下:

模拟器(hdpi)显示效果如下:

适配方式三:布局文件适配

不同分辨率的手机,加载不同的布局文件已达到适配效果。创建多个layout(如:layout-1280x720、layout-800x480)文件夹用于存放不同像素密度手机所需布局文件。

模拟器(hdpi):加载activity_main.xml布局文件,位于res/layout-800x480文件夹下:

                

G700(xhdpi):加载activity_main.xml布局文件,位于res/layout-1280x720文件夹下:

                

G700(xhdpi)显示效果如下:

模拟器(hdpi)显示效果如下:

适配方式四:java代码适配

通过android相应api获取当前手机的宽高像素值,按比例分配屏幕中控件的宽高以达到适配效果。核心代码如下:

布局文件    activity中oncreate核心代码:    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);

G700(xhdpi)显示效果如下:

模拟器(hdpi)显示效果如下:

适配方式五:权重适配

通过android提供的(权重)剩余空间分配,已达到适配效果。显示界面加载布局文件如下:

        

G700(xhdpi)显示效果如下:

模拟器(hdpi)显示效果如下:

更多相关文章

  1. 【Android自学笔记】对应资源文件夹中的图标尺寸
  2. Android 查看/data/data文件夹并取回文件
  3. adbWireless能够让手机用无线来取代USB连接而使用ADB工具
  4. Android中解析与创建XML文件
  5. Android中读取properties文件2
  6. Android下载 文件(APP) 并且静默安装
  7. Android文件读写权限
  8. android 文件选择

随机推荐

  1. Android(安卓)Interface Definition Lang
  2. java中org.xml.sax不能读取xml回车换行的
  3. android之MultiAutoCompleteTextView
  4. Android——Hardware Acceleration
  5. Android LocalSocket / LocalServerSocke
  6. Android 通知Notification的两种实现方法
  7. ANDROID 【GRIDVIEW】 DETAILED ANNOTATI
  8. Android 打开文件管理器 获取文件的真实
  9. How to Run Android Applications on Ubu
  10. android 随手记 SQLITE代码 直接能用