安卓屏幕适配问题

1.权重适配

<span style="font-size:18px;">通过android提供的(权重)剩余空间分配,以达到适配的效果
注意:这是控件的宽或者高的尺寸要设置为0dp 权重值越大所占比例越大
<span style="font-family:'Times New Roman';font-size:14px;color:#000000;border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;color:#333333;line-height: 22px; "></span></span></span><pre style="margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 6px; padding-right: 10px; padding-bottom: 6px; padding-left: 10px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; font-size: 13px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(204, 204, 204); border-right-color: rgb(204, 204, 204); border-bottom-color: rgb(204, 204, 204); border-left-color: rgb(204, 204, 204); line-height: 19px; overflow-x: auto; overflow-y: auto; border-top-left-radius: 3px 3px; border-top-right-radius: 3px 3px; border-bottom-right-radius: 3px 3px; border-bottom-left-radius: 3px 3px; "><code style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; white-space: pre; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: transparent; border-top-left-radius: 3px 3px; border-top-right-radius: 3px 3px; border-bottom-right-radius: 3px 3px; border-bottom-left-radius: 3px 3px; border-width: initial; border-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: initial; border-color: initial; background-position: initial initial; background-repeat: initial initial; ">   <TextView 
        android:background="#000000"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>
    <TextView 
        android:background="#123456"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/></code>
如果被权重的尺寸设置为fill_parent就会出现一系列问题 所以要尽量规避

 

2.图片适配


  <span style="font-size:18px;"> 不同像素密度的手机加载工程资源文件(res)中不同的资源图片</span>

3.dimens.xml文件适配

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


</span>


4.布局文件适配

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


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.其他

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

</span><p>由于android<span style="color:#FF0000;"><strong>代码中写的单位都是像素</strong></span>,所有需要通过工具类进行转化</p><p>尽量<strong>使用9-patch图</strong>,可以自动的依据图片上面显示的内容被拉伸和收缩。其中在编辑的时候,灰色区域是被拉伸的,</p><p>左上表示的是拉伸区域(可以用两个点表示拉伸位置)  右下表示的是文本显示区域
</p><p>工具在adt-bundle-windows-x86-20130522\sdk\tools目录下的draw9patch.bat</p>


像素密度的计算方式

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

<span style="font-family:Helvetica, arial, freesans, clean, sans-serif;">//</span>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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值