一个简单粗暴的屏幕适配

来源:互联网 发布:火狐浏览器打不开淘宝 编辑:程序博客网 时间:2024/05/19 07:09

由于Android碎片化严重,屏幕适配一直是开发中较为头疼的问题。面对市面上五花八门的屏幕大小与分辨率,Android基于dp与res目录名称来适配的方案已无法满足一次编写全屏幕适配的需求,为了达到最优的视觉效果,开发过程中总是需要花费较多资源进行适配。也有开发者给出了一些自己的解决方案。

使用姿势:

  • 核心。使用冷门的pt作为长度单位,按照上述想法将其重定义为与屏幕大小相关的相对单位,不会对dp等常用单位的使用造成影响。

  • 绘制。编写xml时完全对照设计稿上的尺寸来编写,只不过单位换为pt。假如设计图宽度为200,一个控件在设计图上标注的长度为3,只需要在初始化时定义宽度为200,绘制该控件时长度写为3pt,那么在任何大小的屏幕上该控件所表现的长度都为屏幕宽度的3/200。如果需要在代码中动态转换成px的话,使用TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, value, metrics)

  • 预览。实时预览时绘制页面是很重要的一个环节。以1334x750的设计图为例,为了实现于正常绘制时一样的预览功能,创建一个长为1334磅,宽为750磅的设备作为预览,经换算约为21.5英寸((sqrt(1334^2+750^2))/72)。预览时选择这个设备即可。 


使用方法: 在build.gradle中加入依赖:
compile 'com.bulong.rudeness:rudeness:latest.release@aar'

在Application的onCreate中引用:

//设计图标注的宽度int designWidth = 750;new RudenessScreenHelper(this, designWidth).activate();
这样绘制出来的页面就跟设计图几乎完全一样,无论大小屏上看起来就只是将设计图缩放之后的结果。


SDK API Refrences:

public class RudenessScreenHelper {    /**     * 转换dp为px     * @param context context     * @param value 需要转换的dp值     * @return px值     */    public static float dp2px(Context context, float value);    /**     * 转换pt为px     * @param context context     * @param value 需要转换的pt值,若context.resources.displayMetrics经过resetDensity()的修改则得到修正的相对长度,否则得到原生的磅     * @return px值     */    public static float pt2px(Context context, float value);    /**     * 构造方法     * @param application application     * @param width 设计稿宽度     */    public RudenessScreenHelper(Application application, float width);    /**     * 激活本方案     */    public void activate();    /**     * 恢复系统原生方案     */    public void inactivate();}

原文链接请戳这里



、、



原创粉丝点击