关于屏幕适配的理解
来源:互联网 发布:windows连接git服务器 编辑:程序博客网 时间:2024/05/29 18:35
做个记录
主要是有关drawable-mdpi,drawable-hdpi,drawable-xhdpi等等以及layout-1024x720,layout-1024x552,layout-1280x720等还有layout-mdpi,layout-hdpi,layout-xhdpi等的理解和应用,当然还有dp,dpi,sp,px的转化
想要知道怎么运用就要先知道dp,sp,px代表的意思
px:像素dp/dip:独立像素,长度单位
sp:长度单位,一般用来设置字体大小
dpi:每英寸的点数,即每英寸所包含的像素个数
density:屏幕密度,其中density=dpi/160
Android Drawable
我们新建一个Android项目后应该可以看到很多drawable文件夹,分别对应不同的dpi
drawable-ldpi (dpi=120, density=0.75)
drawable-mdpi (dpi=160, density=1)
drawable-hdpi (dpi=240, density=1.5)
drawable-xhdpi (dpi=320, density=2)
drawable-xxhdpi (dpi=480, density=3)
除此之外还要先知道自己设备是属于上面的哪个属性,可运行下面的代码获取相关信息:
Resources resources = this.getResources(); DisplayMetrics dm = resources.getDisplayMetrics(); float density = dm.density;//密度 int width = dm.widthPixels;//分辨率:像素 int height = dm.heightPixels;//分辨率:像素 int screenWidth = (int)(width/density);//屏幕的宽度:dp int screenHeight = (int)(height/density);//屏幕高度:dp得到density之后,就可以知道自己的设备需要适配哪个属性的了,假设你只在drawable_xhdpi文件夹下放了test图片,xhdpi的设备会去xhdpi文件夹下找到test图片并直接显示,而mdpi的设备优先会去mdpi文件夹里查找test图片,但是没找到,最后在xhdpi文件夹下找到,然后会自动根据density计算并缩放显示出来,实际显示出来的大小是120/2=60px,反而如果在mdpi文件夹中找到了120*120的图片,那么显示出来的大小就是120/1=120px,综上所述,如果我们在mdpi文件夹和xhdpi文件夹中都放入一张120*120的图片,那么在mdpi中找到的图片显示会偏大,所以在屏幕适配的时候,如果想要保持效果比例一致,在不同文件夹的图片一般都会有对应大小的图片,但很多情况下,有时候只会提供一张图片,一般这种情况我们是首选将图片放入xhdpi文件夹(前两年都是这样,主要是依据当时主流手机设备的分辨率有关),现在大部分手机都是1920*1080(480dpi)的,这个选择可以根据自己情况而定,像电视TV测试屏幕很多是1920*1080(横版,240dpi)的。
layout-mdpi这些跟上面drawable的一样
下面是一个转化的工具类(网上找的)
package com.zhy.utils;import android.content.Context;import android.util.TypedValue;/** * 常用单位转换的辅助类 * * * */public class DensityUtils{private DensityUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/** * dp转px * * @param context * @param val * @return */public static int dp2px(Context context, float dpVal){return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal, context.getResources().getDisplayMetrics());}/** * sp转px * * @param context * @param val * @return */public static int sp2px(Context context, float spVal){return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,spVal, context.getResources().getDisplayMetrics());}/** * px转dp * * @param context * @param pxVal * @return */public static float px2dp(Context context, float pxVal){final float scale = context.getResources().getDisplayMetrics().density;return (pxVal / scale);}/** * px转sp * * @param fontScale * @param pxVal * @return */public static float px2sp(Context context, float pxVal){return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);}}
参考资料:
http://blog.csdn.net/fumeidonga/article/details/50999977
http://blog.csdn.net/icewst/article/details/38685319
待完善...
阅读全文
0 0
- 关于屏幕适配的一些理解
- 关于屏幕适配的理解
- 关于屏幕适配的理解(大牛可忽略)
- 关于屏幕的概念理解
- 屏幕适配的理解
- 关于适应不同屏幕的理解
- 关于android屏幕dp的理解
- cocos2dx 3.2 屏幕适配的理解
- iOS 屏幕适配的理解
- Android中屏幕适配的理解
- 关于屏幕适配
- 关于屏幕适配
- 关于屏幕适配
- 关于屏幕适配
- 关于屏幕适配
- 关于屏幕适配?
- 关于Android的多种屏幕适配
- 关于Android的多种屏幕适配
- base64图片
- 使用jsoup对HTML文档进行解析和操作
- [洪流学堂]Hololens开发:Unity3d与Visual Studio最佳实践
- GIT删除子模组
- 云付刷卡安全吗?
- 关于屏幕适配的理解
- 跑酷类小demo
- 剑指Offer 面试题27:二叉树的镜像 Java代码实现
- 2017年12月7号培训笔记
- [Steam]SteamDirect开发者的使用参考
- Qt快速入门系列教程目录
- OVS和OVN 2.8新功能
- 被苹果摆了一道的高通,亮出了一张“小米”牌
- [LeetCode] 627.Swap Salary