今日头条屏幕适配思路

Android中xml布局文件中写的是什么单位最终会转化成px
android.util.TypedValue#applyDimension

public static float applyDimension(int unit, float value,                                       DisplayMetrics metrics)    {             switch (unit) {             case COMPLEX_UNIT_PX:            //px            return value;        case COMPLEX_UNIT_DIP:            //dp * density            return value * metrics.density;        case COMPLEX_UNIT_SP:        //sp * scaledDensity            return value * metrics.scaledDensity;        case COMPLEX_UNIT_PT:            return value * metrics.xdpi * (1.0f/72);        case COMPLEX_UNIT_IN:            return value * metrics.xdpi;        case COMPLEX_UNIT_MM:            return value * metrics.xdpi * (1.0f/25.4f);        }        return 0;    }

我们在开发过程中,主要用px、dip、sp这三种单位比较多一些

dip = value * metrics.density;

通过上面返回值可以发现 dip = value * DisplayMetrics.density
如果能把DisplayMetrics里面的density常量值进行修改,不就可以在不用分辨率手机缩放显示一样的效果。

实现

我的手机宽度是720px,宽度是360dp

case COMPLEX_UNIT_DIP:            return value * metrics.density;

如果ui给出设计图总宽度为 360 dp,那么如果有一个控件在设计图上的宽为180dp、高为180dp那么这个控件宽度占整个设计图宽度的一半 (180 / 360 = 0.5)

(dp * density = px)
系统最后将高宽dp都换算成 px,180dp * 2 = 360px

public class Density {         //ui参考设备的宽,dp    private static final float WIDTH = 360;    private static float appDensity;    public static void setDensity(final Application application, Activity activity) {             DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();        if (appDensity == 0) {                 appDensity = displayMetrics.density;        }        //计算目标值density,densityDpi        float targetDensity = displayMetrics.widthPixels / WIDTH;        int targetDensityDpi = (int) (targetDensity * 160);        DisplayMetrics dm = activity.getResources().getDisplayMetrics();        dm.density = targetDensity;        dm.densityDpi = targetDensityDpi;    }}

验证

720* 1080分辨率手机 density = 2
Android屏幕适配之修改系统density_第1张图片


1080*1920分辨率手机 density=3

Android屏幕适配之修改系统density_第2张图片


今日头条屏幕适配方案

更多相关文章

  1. Android 处理屏幕解锁和设置锁屏密码
  2. Activity 技巧 屏幕 进度条 控制
  3. android上,实现直接在屏幕上显示点击位置,方便调试。
  4. android获取手机信息以及服务商信息
  5. JS判断客户端是否是iOS或者Android手机移动端
  6. 2010.12.26——— android 获得手机号码 和 IMEI号 等
  7. android 设置系统屏幕亮度

随机推荐

  1. pro.Android Media--调用内置的照相机
  2. Android(安卓)– 匯入專案以及注意事項
  3. Android的消息循环机制 Looper Handler类
  4. Android中的BatteryService及相关组件
  5. android 按键注入,模拟back,home,menu按键
  6. androidのActionbar
  7. Android GPS两点间距离
  8. Android之——实现应用卸载功能
  9. 文件浏览器
  10. Android发送短信功能代码