关于 屏幕适配的具体做法

关于屏幕适配,之前只是了解过,可以在资源文件夹的名字后面增加后缀,来让系统自动区分,在当前设备上应该使用哪种资源。

具体遇到案例,今天还是第一次,下面简单说一下需求:

公司有三种设备用来测试同一个app,手机,平板,以及电视盒子;

在尺寸上完全是3个级别的设备。

所以我得想办法让同一套代码能自动适应3种设备。

直接看方案:

在res文件下,做两套layout布局文件(当然,copy之后修改),下面这个sw600是指 在至少600dp的宽度的设备上使用这个布局。

上面那个不带后缀的,则是系统检索了设备尺寸之后发现没有更合适的布局文件的时候才使用的。

 

一般手机的宽不会超过600dp,而平板一般都是大于这个尺寸的。

 

关于多屏幕适配的布局文件夹名称的写法,参照https://developer.android.com/guide/practices/screens_support.html

这是安卓官网中的一个网页。其他基础概念以及其他相关知识点,就不在此赘述。

 

另外,我们怎么去判断当前设备上的宽高dp值呢?参照如下代码,计算公式来自安卓官网,可自行百度。那这样的话,就可以针对特定设备进行特别布局了,问题解决。

public void getAndroiodScreenProperty() {
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);

        int widthPx = dm.widthPixels;// 屏幕宽度(像素)
        int heightPx = dm.heightPixels; // 屏幕高度(像素)
        int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240)
        //DPI计算公式应该是
        //px = dp*(dpi/160);
        //所以 dp = px * 160 / dpi;
        int widthDpValue = widthPx * 160 / densityDpi;
        int heightDpValue = heightPx * 160 / densityDpi;
        Log.e("MyLog", widthDpValue + "======" + heightDpValue);
    }

  

 最后说一个疑点,我按照上面的方法算出了电视盒子的宽DP,是1280,但是我多加了一个layout-sw1280之后,

这个sw1280dp的布局好像没起作用,我在盒子上试验了一下,还是用的sw600dp的那个布局,今天没时间了,暂作个记录,后面处理。

 

转载于:https://www.cnblogs.com/hankzhouAndroid/p/6548321.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值