精华内容
下载资源
问答
  • 安卓 dp 适配 算法

    2018-02-07 14:33:24
    安卓开发 屏幕 适配 之 dp 适配 支持 多种分辨率 学无止境
  • 目录 一、基本概念 1.1 dpi dpi是dot per inch,每英寸多少点,ppi是 Pixel per inch,每英寸像素数,针对显示器的设计时,dpi=ppi。...安卓开发用的单位,官方规定:1dp表示在屏幕点密度为160pp...

    目录


    一、基本概念

    1.1  dpi

    dpi是dot per inch,每英寸多少点,ppi是 Pixel per inch,每英寸像素数,针对显示器的设计时,dpi=ppi。ppi计算方法是长宽各自平方之和开方,除以对角线长度(单位英寸)。

    ppi表示显示设备的点密度,dpi表示印刷品点密度。

    1.2  dip或dp

    安卓开发用的单位,官方规定:1dp表示在屏幕点密度为160ppi时1px长度。因为安卓设备屏幕众多不可能为每个屏幕单独开发,所以用公式 px=dp*(ppi/160)计算在不同屏幕上的像素数。1dp=1dip ,为了与字体的sp统一。

    要理解DP是物理尺寸是不会变的(就像是英寸、厘米这些),在不同屏幕密度下,1dp的物理长度也相同。

    1.3  px

    像素的大小是没有固定长度的,不同设备上一个单位像素色块的大小是不一样的。
    例如,尺寸面积大小相同的两块屏幕,分辨率大小可以是不一样的,分辨率高的屏幕上面像素点(色块)就多,所以屏幕内可以展示的画面就更细致,单个色块面积更小。而分辨率低的屏幕上像素点(色块)更少,单个像素面积更大,可以显示的画面就没那么细致。

    作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化(屏幕越大,像素越低,单个像素越大,反之亦然)。所以在使用像素作为设计单位时,在不同的设备上可能会有缩放或拉伸的情况。

    1.4  density  

    density 在每个设备上都是固定的,DPI / 160 = density屏幕的总 px 宽度 / density = 屏幕的总 dp 宽度(自己理解1dp中包含像素的个数)

    二、详细说明

    1.1  dpi

    通常情况下,一部手机的分辨率是宽x高,屏幕大小是以寸为单位,那么三者的关系是:

     

    举个例子:屏幕分辨率为:1920*1080,屏幕尺寸为5吋的话,那么dpi为440。

    1.2  dip或dp

    引用一张图

    图中我们清晰看到,如何通过px、inch、dpi来获取dp。再次强调,dp是物理尺寸,是不会变的。Android 官方规定,当设备的dpi为160dpi时,1dp=1px的。比如:将一个控件设置长度为1dp,那么在160dpi上该控件长度为1px,在240dpi的屏幕上该控件的长度为1*240/160=1.5个像素点。(或者我们可以理解,当设备dpi为160dpi时,即每英寸有160个像素,可以理解1dp=1/160inch物理尺寸。)

    1.3  px

    px和dp之间的关系。android中的dp在渲染前会将dp转为px,计算公式:

    • px = density * dp;

    • density = dpi / 160;

    • px = dp * (dpi / 160);

    1.4  density

    根据上面density 的概念,屏幕的总 px 宽度 / density = 屏幕的总 dp 宽度我们来看一个例子:

    • 设备 1,屏幕宽度为 1080px480DPI,屏幕总 dp 宽度为 1080 / (480 / 160) = 360dp

    • 设备 2,屏幕宽度为 1440560DPI,屏幕总 dp 宽度为 1440 / (560 / 160) = 411dp

    可以看到屏幕的总 dp 宽度在不同的设备上是会变化的,但是我们在布局中填写的 dp 值却是固定不变的。

    三、深入理解

    1.1  px、dp、density 、dpi之间的关系


     

    液晶屏显示图像,放大来看是一个个小点组成的,这些小点就是像素点(px)。

    有的手机屏幕小像素点少,比如HTC G11的4寸480x800屏幕,还有的屏幕大像素点多,比如三星note2的5.5寸720x1280屏幕。

    这个图标在不同的手机屏幕上显示出来,就是上图的效果。可以想象一下我们不同的手机打开同一个应用,按钮的尺寸相差很大。

    图片显示大小是由什么决定的呢,屏幕尺寸?上图第1和第2个屏都是4.3英寸。像素数?第2和第3个屏都是720x1280的像素。最后我们找到了点密度(density),也就是像素数和屏幕尺寸的比值。density是每单位长度容纳的像素数量,一般用像素/英寸,也就是Pixel per inch(ppi)。

    屏幕的尺寸是屏幕对角线的长度,计算对角线像素数量再除以屏幕尺寸就得到了ppi值。上面3个屏的点密度分别是217ppi,342ppi,267ppi。

    对比上图可以知道,ppi越低图片显示的越大,ppi越高图片显示的越小。

    要让不同屏幕显示图片的大小相同,就需要对图片进行缩放,给高ppi屏提供更大的图片。

    高ppi屏幕需要更大的图片才能得到同样的显示效果,反之亦然。ppi和图片px的关系如下

    px1/px2=ppi1/ppi2

    选定一个ppi值作为基础绘制图片,用ppi的比值计算出图片缩放比例就可以适配各种屏幕

    px2=px1*(ppi2/ppi1)

    安卓选定的这个基础值就是160ppi

    px2=px1*(ppi2/160)

    我们已经解决了图片放大缩小的问题,还需要一个单位用来描述长度(因为px不固定,inch不方便)。安卓创造了一个新的单位dp,中文名设备独立像素。并且规定在160ppi的屏幕上,1dp=1px。

    设计师只需要针对160ppi的显示屏设计并制图,安卓会根据当前手机屏幕的ppi值来放大缩小图片,在不同的屏幕上得到相近的显示效果。

    引用:

    https://www.zhihu.com/question/21220154

    https://www.cnblogs.com/JLZT1223/p/6784449.html

    https://www.jianshu.com/p/55e0fca23b4f

     

     

     

    展开全文
  • 安卓dp转px,px转dp方法

    万次阅读 2018-06-06 15:35:04
    dp转px: /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().densit...

    dp转px:

        /**
         * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
         */
        public static int dip2px(Context context, float dpValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dpValue * scale + 0.5f);
        }

    px转dp:

        /**
         * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
         */
        public static int px2dip(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }

    转自:https://blog.csdn.net/Keep_Driving_XinYang/article/details/50498628

     

          最后推荐给一些想进大厂或者还没有拿到心仪offer的攻城狮们一本书,由大厂java面试官胡书敏编写,满满的干货,助你进到想去的公司。

     

    博主上传资源下载链接:

    自制免费无广告小说阅读APP下载:

    https://download.csdn.net/download/yonghuming_jesse/10390364

    全屏播放视频不拉伸源码:

    https://download.csdn.net/download/yonghuming_jesse/10646274

    科大讯飞语音评测服务接入源码:

    https://download.csdn.net/download/yonghuming_jesse/10616924

    android饺子播放器使用源码:

    https://download.csdn.net/download/yonghuming_jesse/10619119

    视频播放前显示视频第一帧源码:

    https://download.csdn.net/download/yonghuming_jesse/10646332

    展开全文
  • 一个用于屏幕适配时必不可少的工具类android dx和dp 像素和dp之间转换的工具类
  • 他们也不懂Androiddp和sp单位是怎么回事。这个时候我们Android工程师如果不注意怎么转换的话,就可能开发出很难看的界面。 那么如何才能正确的将UI稿的上的px转换成androiddp单位呢?这个取决于UI设计师的设计...

    很多UI工程师为了适配iOS,常常拿iOS手机作用参考模型,设计出来的UI稿只有PX标注的。他们也不懂Android的dp和sp单位是怎么回事。这个时候我们Android工程师如果不注意怎么转换的话,就可能开发出很难看的界面。

    那么如何才能正确的将UI稿的上的px转换成android的dp单位呢?这个取决于UI设计师的设计稿基于什么设备。

    一般安卓开发者只要适配一款主流设备,比如Nexus5、Pixel 3,其它大部分手机都可以适配。如果要精确适配,就要针对不同分辨率进行单独适配。为了简单起见,我们只需要适配主流设备就可以了。

    首先,我们要知道UI设计师的设计稿是基于什么设备设计的。知道了什么设备,这个设备的dpi也就知道了。那么px与dp之间换算就很简单:px=(dpi/160)dp。公式变形:dp=px*160/dpi

    要注意的是这个公式中dpi并不是我们自己计算出来的(屏幕对角线的相素数除以对角线长度),而是手机厂家ROM中设置density(density=dpi/160),android通过java代码可以直接获取:

    //以下是获取density,density=densityDpi/160
     context.getResources().getDisplayMetrics().density;
    //以下是获取densityDpi,就是我们常说的dpi:像素密度
     context.getResources().getDisplayMetrics().densityDpi;
    

    而实际情况下,设计师常常并没有针对安卓设备单独做一套设计稿,而是选择了iphone手机作为参考机型。他们以为适配了IOS就等于适配了安卓。标注尺寸单位都是px。设计帅常常拿iphone6(s)或者是iphone6(s) plus作为参考机型,一个4.7寸一个5.5寸。比如是4.7英寸的iphone6,它的分辨率是1334x750(dpi是326),而安卓设备最接近这个数值的分辨率是1280*720,对应这个分辨率的dpi一般是320,跟iphone 6(s)很接近,那么UI使用的iphone6(s)设计稿就对应安卓1280x720(dpi是320)的设备,所以我们就用320这个dpi进行换算。再比如是5.5英寸的iphone6 plus,它的分辨率是1920x1080(dpi是480),而安卓设备刚好也有很多同等的分辨率,对应这个分辨率的dpi一般是480,而iphone6 plus的dpi也是480,所以我们用480的dpi进行换算。

    举个例子,设计师基于iphone6的设计稿标注20px,换算成dp就是20*160/320=20*(1/2)=20/2=10,也就是除以2得到dp。如果设计师基于iphone6 plus的设计稿标注120px,那么dp就是120*160/480=120*(1/3)=120/3=40,也就是除以3得到dp

    那么如何知道设计稿是基于什么设备设计的呢?一般我们看UI稿的尺寸就可以推测出它的参考机型,比如UI稿的尺寸是1334x750,那肯定是iphone6(s)一类的机型,如果是1920x1080,那就是iphone6(s) plus一类的机型。如果UI稿的尺寸匹配不到一款主流的机型,那就是UI设计师不合格啦!

    还有一种方法,程序员不需换算,UI设计师可以直接在设计工具中将px单位转换成dp单位,标注图上显示的就是dp单位,比如PxCook这个工具已经支持这个功能。

    以上是一般性的适配方法,如果厂商生产的手机很奇葩,比如1280*720的分辨率dpi不是320,而是相差很大,比如是400,那么Android开发者就需要进行单独适配了。

    展开全文
  • Android dp2px

    千次阅读 2016-04-18 10:32:41
    当我们在资源文件里设置尺寸的时候多是用dp,那么Android的开发并不局限于我们所用的资源文件,有时候我们需要动态的管理视图的尺寸,view给我们提供了setPadding(left, top, right, bottom);但是此时的 int并不...
    1
    当我们在资源文件里设置尺寸的时候多是用dp,那么Android的开发并不局限于我们所用的资源文件,有时候我们需要动态的管理视图的尺寸,view给我们提供了setPadding(left, top, right, bottom);但是此时的  int 并不是dp,而是px,由自己来转换;下面给出转换的函数。
        public static int px2dip(Context context, float pxValue) {  
            final float scale = context.getResources().getDisplayMetrics().density;  
            return (int) (pxValue / scale + 0.5f);  
        }  
        
    	public static int dip2px(Context context, float dpValue) {
    		float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (dpValue * scale + 0.5f);
    	}
    
    	public static int dip2px(float dpValue) {
    		Context context = MyApplication.getApplication();
    		float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (dpValue * scale + 0.5f);
    	}

    展开全文
  • Android蓝牙连接a2dp蓝牙耳机

    千次阅读 2018-12-06 17:20:08
    开发功能:Android中蓝牙连接A2DP设备,蓝牙耳机设备 功能实现: 本应用提供以下功能: 第一:开启蓝牙 第二:查找过滤掉A2DP设备 第三:连接A2DP设备 第四:断开连接A2DP设备 第五:保存通过本应用连接的A2DP设备 ...
  • Android中layout-sw600dp、layout-w600dp和layout-h600dp的区别

    万次阅读 多人点赞 2016-03-24 21:59:01
    Android开发过程中,经常会遇到像layout-sw600dp, values-sw600dp这样的文件夹,以前没用到,不怎么关注,所以一直一知半解的。现在要用到了,才去了解他们的用法和区别。其实,他们和drawable-hdpi/ drawable-mdpi...
  • 当布局的布局方向为水平的时候android:orientation="horizontal"如果是vertical则需要对height进行设置 我们经常见到 android:layout_width="0dpandroid:layout_weight="xxx"...
  • 刷入谷歌原生android 12 DP2的办法

    千次阅读 2021-03-18 07:03:15
    如何刷入原生安卓/Android 12 DP2教程-附录Android 12 DP2 下载地址 谷歌今天凌晨正式发布了原生Android12 DP 2,具体的Android12 DP 2的ota包和底包下载整理如下: Device OTA Factory Image Google ...
  • Android手机屏幕px转dpdp转px工具类

    千次阅读 2015-06-04 15:35:37
    代码如下:import android.content.Context;public class DensityUtil { private static float scale; /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float...
  • Android蓝牙A2DP连接实现

    千次阅读 2019-03-10 14:26:47
    开发环境: 开发工具:Androidstudio ...开发功能:Android中蓝牙连接A2DP设备,蓝牙耳机设备 功能实现: 本应用提供以下功能: 第一:开启蓝牙 第二:查找过滤掉A2DP设备 第三:连接A2DP设备 ...
  •  在Android开发中,距离单位google推荐使用“dp”,文字大小的单位使用“sp”,(ps:IOS距离单位是“px”,文字单位是“pt”)但是在实际开发中我们经常会遇到在java代码中写入距离单位,但是这样的数字代表的是px...
  • Android 的px到DP的转换工具

    千次下载 热门讨论 2012-07-31 10:58:16
    android开发中布局文件要用DP进行布局,但是美工在设置的时候一般都是用PX,美工按照800*480分辨率设计完了,程序人员可以直接使用PX进行布局测试,该工具可以再程序完成时将PX直接转换为DP 方便适配
  • A2DP音频流在安卓系统中的实现 通过前一篇文章《蓝牙音乐之A2DP音频流》的分享,大家都清楚了A2DP音频流的开启、暂停、数据传输等一系列协议规定,今天就带大家一探安卓系统中这部分是如何实现的。 这篇文章主要...
  • Android 蓝牙开发(九)A2DP基本功能

    万次阅读 热门讨论 2017-05-13 14:49:46
    本文主要是Android做为Audio Source端,A2DP的基本操作:包括连接、断开连接、设置优先级、获取优先级、获取A2DP连接状态、
  • android kotlin dp和px转换

    千次阅读 2019-12-24 16:59:34
    object DimenUtils { ... fun dp2px(context:Context,dp:Float):Float=dp * context.resources.displayMetrics.density fun px2dp(context:Context,px:Float):Float =px / context.resources.displayMetrics.d...
  • 基于Android的蓝牙A2DP功能的实现

    热门讨论 2010-05-24 13:34:55
    基于Android的蓝牙A2DP功能的实现 基于Android的蓝牙A2DP功能的实现 基于Android的蓝牙A2DP功能的实现
  • Androiddp的概念

    千次阅读 2015-07-05 18:22:36
    以前刚接触Android时就知道一个概念:由于android设备种类繁多,屏幕分辨率的ppi(pixels per inche,有时也叫dpi dots per inch)也各有不同,因此定义大小时如果使用像素(pix)作为单位的话,必然导致在不同设备上看...
  • 主要介绍了Android应用中屏幕尺寸的获取及dp和px值的转换方法,这里主要介绍将dp转化为px值的例子,需要的朋友可以参考下
  • 如标题所说,尽量使用android:layout_marginLeft="10dp",虽然android:paddingLeft="10dp"是内间距,其实也可以使用控件间距实现一样效果,而且目前 RelativeLayout 使用内间距android:paddingLeft="10dp",魅族一...
  • 本篇文章是对在Androiddp和px之间进行转换的实现方法进行了分析介绍,需要的朋友参考下
  • 总结&备忘:android尺寸单位dp与mm

    千次阅读 2016-05-28 01:12:13
    android ui设计中度量单位dp是什么 为什么要用dp 为什么不用mm
  • androiddp和px的关系

    千次阅读 2017-12-08 18:12:02
    关于androiddp和px的关系是我刚开始学习android的第一个知识点,不知不觉学安卓也有一年了,但是偶然间我发现我理解的dp和px的关系一直是错的,真的是有一点搞笑,今天特意写一篇博客纪念一下这个我理解错一年的...
  • androiddp还是sp还是px等

    千次阅读 2015-07-31 22:13:39
    总结:安卓开发中经常用dp设置边距或内边距等,用sp设置字体dp是density-independent pixel的缩写,表示密度无关像素。Android在运行时会根据手机的密度高低将其值转化为像素单位。 sp是scale-independent pixel的...
  • 想必大家都看过鸿洋大神的博客了,使用AutoLayout进行适配,不必去换算,直接拿着设计给的px进行开发即可,这个库是升级版,由qq_31546295这位大神提供,不仅可以直接使用px,更可以直接使用dp进行开发适配。...
  • android 屏幕dp值计算

    千次阅读 2015-04-15 17:06:41
    从源码角度分析屏幕dp值计算
  • Android 蓝牙开发(十)A2DP源码分析

    万次阅读 2017-05-18 19:19:10
    上一篇说了下A2DP的一些基本操作,这篇分析下系统应用、系统源码是如何操作A2DP的。尤其是其连接过程,基于Android4.3源码
  • Android UI 设计规范—— px 转 dp

    千次阅读 2018-04-23 00:31:43
    最简单的理解是Google 为了解决android碎片化的屏幕适配而弄出来的一套东西。 公式以及文章来源 Google的设计规范:https://material.io/guidelines/layout/units-measurements.html# 换算的基本公式 dp = ...
  • http://blog.csdn.net/rocklee/article/details/51524982 配套的公式,直接输入真机调试好后的dp值,即可得到新机型的dp值,谁用谁知道!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,072
精华内容 97,628
关键字:

dp安卓