ringa_lee
最近刚学这块,简单说下我的理解,如有错误,欢迎指正
关于dp和px转换,看一下他们换算公式
dpi = 屏幕水平(垂直)方向像素个数/屏幕的水平(垂直)方向的尺寸 dp = (px * 160) / (屏幕水平(垂直)方向像素个数/屏幕的水平(垂直)方向的尺寸)
你能说屏幕大小和分辨率没有关系么?他们不是直接的影响,而是间接的。
你这么理解也没问题。dp是为了适配而生的,以前你再布局文件中设置按钮宽度为20px, 在不同分辨率手机调试应用,你会发现他们是不一样大小的,所以你要手动适配,很累。如果宽度20dp,系统会经过内部换算后在不同分辨率下显示的大小是一致的,这也就是你用尺子量,为什么他们是一样大小的原因。
最后一个问题,因为没做过类似工作,就不回答了,不过你可以参考官方里面关于tv开发的指导文档
简单的说dpi(dots-per-inch)说的是每英寸上的点数,不是每英寸上的像素,ppi(pixel-per-inch)才是每英寸的像素,计算屏幕尺寸是通过ppi来计算的不是通过dpi。dp与px的转换公式是:px = dp * densitydensity这个值指的就是屏幕的逻辑密度,这个逻辑密度怎么计算呢?一般160dpi的density值为1,举个例子,一般情况下1920*1080 的density就是12X9。实际使用时还需要考虑手机状态栏和标题栏所占用的空间大小。假设是20dp大小,他在320480 上的像素是20 2 = 40px,在19201080上是 20 12 = 240px 怎么会一样大小。得到了像素px之后再根据屏幕中x,y方向上的ppi来最终决定了控件的大小。上面所述的这些值都可以通过DisplayMetrics这类来获取到,density = mContext.getResources().getDisplayMetrics().density 屏幕x轴方向的ppi = mContext.getResources().getDisplayMetrics().xdpi屏幕y轴方向的ppi = mContext.getResources().getDisplayMetrics().ydpi
讲道理。。直接用百分百布局库。。。dp这是一个坑人的设定。。。多少技术汉子和设计妹子在这dp上打的头破血流。。。
最近刚学这块,简单说下我的理解,如有错误,欢迎指正
关于dp和px转换,看一下他们换算公式
dpi = 屏幕水平(垂直)方向像素个数/屏幕的水平(垂直)方向的尺寸
dp = (px * 160) / (屏幕水平(垂直)方向像素个数/屏幕的水平(垂直)方向的尺寸)
你能说屏幕大小和分辨率没有关系么?他们不是直接的影响,而是间接的。
你这么理解也没问题。dp是为了适配而生的,以前你再布局文件中设置按钮宽度为20px, 在不同分辨率手机调试应用,你会发现他们是不一样大小的,所以你要手动适配,很累。如果宽度20dp,系统会经过内部换算后在不同分辨率下显示的大小是一致的,这也就是你用尺子量,为什么他们是一样大小的原因。
最后一个问题,因为没做过类似工作,就不回答了,不过你可以参考官方里面关于tv开发的指导文档
简单的说dpi(dots-per-inch)说的是每英寸上的点数,不是每英寸上的像素,ppi(pixel-per-inch)才是每英寸的像素,计算屏幕尺寸是通过ppi来计算的不是通过dpi。
dp与px的转换公式是:
px = dp * density
density这个值指的就是屏幕的逻辑密度,这个逻辑密度怎么计算呢?一般160dpi的density值为1,举个例子,一般情况下1920*1080 的density就是12X9。实际使用时还需要考虑手机状态栏和标题栏所占用的空间大小。
假设是20dp大小,他在320480 上的像素是20 2 = 40px,在19201080上是 20 12 = 240px 怎么会一样大小。
得到了像素px之后再根据屏幕中x,y方向上的ppi来最终决定了控件的大小。
上面所述的这些值都可以通过DisplayMetrics这类来获取到,
density = mContext.getResources().getDisplayMetrics().density
屏幕x轴方向的ppi = mContext.getResources().getDisplayMetrics().xdpi
屏幕y轴方向的ppi = mContext.getResources().getDisplayMetrics().ydpi
讲道理。。直接用百分百布局库。。。dp这是一个坑人的设定。。。多少技术汉子和设计妹子在这dp上打的头破血流。。。