安卓屏幕适配问题

1.权重适配

通过android提供的(权重)剩余空间分配,以达到适配的效果
注意:这是控件的宽或者高的尺寸要设置为0dp 权重值越大所占比例越大
   
    
如果被权重的尺寸设置为fill_parent就会出现一系列问题 所以要尽量规避
 
  

2.图片适配

安卓屏幕适配问题_第1张图片

   不同像素密度的手机加载工程资源文件(res)中不同的资源图片

3.dimens.xml文件适配

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




4.布局文件适配

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


5.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);

6.其他

首先我会尽量使用线性布局,相对布局,如果屏幕放不下了,可以使用ScrollView(可以上下拖动)
ScrowView使用时要注意:
在不同的屏幕上显示内容不同的情况,其实这个问题我们往往是用滚动视图来解决的,也就是ScrowView;
需要注意的是ScrowView中使用layout_weight是无效的,既然使用ScrowView了,就把它里面的控件的大小
都设成固定的吧。
 在指定宽高的时候,采用dip的单位,dp单位动态匹配

由于android代码中写的单位都是像素,所有需要通过工具类进行转化

尽量使用9-patch图,可以自动的依据图片上面显示的内容被拉伸和收缩。其中在编辑的时候,灰色区域是被拉伸的,

左上表示的是拉伸区域(可以用两个点表示拉伸位置) 右下表示的是文本显示区域

工具在adt-bundle-windows-x86-20130522\sdk\tools目录下的draw9patch.bat



像素密度的计算方式

手机分辨率:800*480(注:手机两个直角边上分别放置了800及480个像素点)
手机尺寸大小:3.7英寸(手机斜边大小)

//Math.sqrt()是开根号的意思
计算结果:Math.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
安卓屏幕适配问题_第2张图片

你可能感兴趣的:(安卓开发)