安卓屏幕适配笔记记录

安卓屏幕单位:

dp (dip): 即设备无关像素(device independent pixels),这种尺寸单位在不同设备上的物理大小相同。
px:即像素(pixel),这个不用多说。
pt:通常用来作为字体的尺寸单位,1 pt相当于1/72英寸。
inch:英寸,1 英寸约等于2.54厘米,主要用来描述手机屏幕的大小。
sp:大部分人只知道它通常用作字体的尺寸单位,实际大小还与具体设备上的用户设定有关。
在上面几种常见的尺寸单位,dp和sp可以看做是虚拟尺寸。其中dp是与设备无关的虚拟像素单位,开发者为UI控件指定以dp为单位的大小后,在不同屏幕密度的Android设备上便能够具有相同的物理尺寸。dp的出现让开发者无需关注屏幕密度、物理像素之间的换算关系。sp则与dp相似,但它主要用作字体的尺寸单位,与dp的区别是:Android系统支持用户设定字体大小,因而sp的实际大小还会根据用户设定在原基础上进行缩放。
来源链接:https://www.jianshu.com/p/bd3944b56b41

常用公式:dp = (px*160)/dpi

代码获取设备dpi:

 DisplayMetrics dm = new DisplayMetrics();
 dm = getContext().getResources().getDisplayMetrics();
 int  dpi = dm.densityDpi;

注:已知dpi 和dp 就可以算出px,每个设备的dpi可能是不一样的,但dp的值都是一样的(dp与设备无关),那如何保持dp的值不变,那就要可以让px的值是变化的,因为dpi也是变化的。

今日头条适配方案的配置:(详细链接:https://www.jianshu.com/p/4aa23d69d481)
1.build.gradle(app):
implementation ‘me.jessyan:autosize:0.9.5’
2.AndroidManifest.xml:自定义设计图的高和宽

<meta-data
    android:name="design_width_in_dp"
    android:value="411" />
<meta-data
    android:name="design_height_in_dp"
    android:value="731" />

3.需要自定义的适配的Activity实现 CustomAdapt,实现如下两个方法,isBaseOnWidth为true时,适配宽,为false 时,适配高。

@Override
    public boolean isBaseOnWidth() {
        return true;
    }
    @Override
    public float getSizeInDp() {
        return ScreenUtils.getAutoSizeHeight(this);
}

动态修改设计图的宽去适配不同dpi的设备:
ScreenUtils类:

  /**
     * 获得屏幕宽度
     *
     * @return
     */
    public static int getScreenWidth(Context context)
    {
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        return outMetrics.widthPixels;
    }
    public static int getAutoSizeHeight(Context context) {
        int width = 411;
        try {
            double idthwpx = getScreenWidth(context);
            if(idthwpx >= 1440) {
                width = 461;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return width;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值