精华内容
下载资源
问答
  • Android屏幕适配

    2016-11-04 11:07:37
    程序图标尺寸 48 * 48 72 * 72 ...仿京东app 采用组件化架构 屏幕适配方案可以较好解决多分辨率及同分辨率不同dpi适配 Android屏幕适配经验谈 Android最简单屏幕适配,项目用dp,sp的只需加一行代码

    为什么要适配

    如何选择方案?不同的方案差别的关键点在于:效率和质量。在保证多屏幕、适配的目标下,我们要尽可能多的提高效率。

    主流屏幕适配方案

    一下几种适配方案都是已经在实际用开发中的比较成熟的方案,而且确实有很多开发者正在使用。不过他们各自也都存在一些缺陷。

    dp适配

    不足

    • 部分设备dpi另类,无法适配;
    • 设计稿和实现间单位不同(dp、px),实现效率低。

    AndroidAutoLayout

    鸿阳大神的名作。不再维护了很可惜。

    不足

    • 框架在运行时会在onMeasure里面做变换,自定义的控件和特定的控件,可能会被影响或限制。
    • 项目与布局大小耦合度高。项目出问题时,可能重写全部布局。

    宽高限定符

    在res目录下,创建多种values-1280x720,dimen去限定。

    以下必须加?

    <supports-screens android:largeScreens="true"
    	android:normalScreens="true" android:anyDensity="true" />
    

    不足

    • 容错机制差,需精准命中具体尺寸;
    • 繁多的宽高尺寸,效率低。

    smallestWidth适配

    sw600dp。推荐使用

    dimens_sw 拉丁吴,生成sw文件的工具

    使用:1. 在DimenTypes中设置需要的dp;2. 在DimenGenerator设置设计稿宽高;3. 执行DimenGenerator.main()。

    不足

    • 最低支持Android 3.2;
    • 多dimens文件导致安装包增大,在kb级别可接受;

    今日头条屏幕适配方案

    原理

    DisplayMetrics.density控制影响着Android界面的拉伸效果,通过改变此成员变量达到适配的目的。

    DisplayMetrics#scaledDensity和DisplayMetrics#density不可设置为同样的值。否则会导致字体大小失效。

    还要监听下字体切换,调用 Application.registerComponentCallbacks() 注册下 onConfigurationChanged 监听即可。在切换字体时更改参数。

    强烈推荐使用。

    不足

    • 老项目中,可能需重改布局;

    资料

    资料

    25学堂

    程序图标尺寸

    48 * 48
    72 * 72
    96 * 96
    144 * 144
    192 * 192

    宽高主流数据

    本段落中除特殊标明外,都是dp单位。
    300,320,360,411,450,这几个尺寸是比较必要的。可在其中以10为单位增加几个。

    平板适配情况:
    不专门适配:不要生成480以上的适配文件,这样在平板上,系统就会使用480这个尺寸的dimens文件;专门适配:一般在600-800之间,关键尺寸是640,768。按照设计图走即可。

    资料

    平板

    资料

    标题

    重点内容
    如何创建不同版本下的dimens。类似hdpi,xhdpi。

    如何找到当前主流设备属性
    A,系统版本
    1,Android Studio中分布图;2. U盟等第三方数据统计;3. 主流厂商产品统计

    B,分辨率

    C,屏幕尺寸

    展开全文
  • dpi适配的新姿势 1. 简介 Android中经常要通过ImageView进行图片资源显示。在加载图片时,首先要考虑的两个因素就是体验问题和性能问题。 其中,体验问题是指图片显示的是否正确(例如Universal-Image-...

    多dpi适配的新姿势


    1. 简介

          Android中经常要通过ImageView进行图片资源显示。在加载图片时,首先要考虑的两个因素就是体验问题和性能问题。

          其中,体验问题是指图片显示的是否正确(例如Universal-Image-Loader在适配Adapter图片资源时会导致图片显示错位),图片显示尺寸是否合适,分辨率是否合适等。本文重点介绍ImageView加载图片中的显示问题。

    2. 问题

          在开发的过程中,一般会将不同分辨率的图片放置在不同的文件夹中,例如将三种同样内容不同分辨率的图片分别放置在drawable-xhdpi,drawable-xxhdpi和drawable-xxxhdpi中。那么,为什么要放置不同分辨率的图片,只放置一张对图片的显示有影响吗?本文中将对这个问题进行分析。

    3. 概念描述

          首先,图片对内存的占用是一个叠加的过程,也就是说图片资源不是及时释放的,使用过的图片在回收过程中可能会有一定程度的延迟。此外,很多时候图片所依附的Activity是出于当前Activity栈底的状态,再GC回收过程,这样的bitmap资源会被认为是活跃状态的,不会被Android系统回收。

          另外一方面,Android中图片加载到内存中的内存占用跟图片的实际大小没有直接的关系,甚至于图片的实际像素尺寸也没有直接的关系。

          在这里,首先要介绍几个概念:

    • 屏幕尺寸:指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米;
    • 屏幕分辨率:指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080;
    • 屏幕像素密度:是指每英寸上的像素点数,单位是dpi,即"dot per inch"的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小;
    • dp/dip:Density Independent Pixels, 密度无关像素的缩写;
    • px:像素,物理上的绝对单位
    • sp:Scale-Independent Pixels的缩写

          一般而言,会有控件使用dp而文字使用sp的说法,但是也不尽然,sp会随着系统文字大小进行拉伸,而dp不会,再具体使用过程中还是要根据实际情况进行使用。

     

    4. 多dpi适配

          图像资源的多dpi适配,就是要在在不同的dpi文件夹中放置不同尺寸的图像资源,供设备自动跳转要显示的资源。以mdpi为尺寸基准1x,借一张很经典的图,多dpi适配可以表示如下:

                                                    图1. 多dpi资源适配

          Android系统寻找图片的步骤是这样的:

    1. 去屏幕密度对应的目录去找。如果找到就拿来用。

    2. 如果没找到,就去比这个密度高一级的目录里面去找,如果找到就拿来用。

    3. 如果没找到就继续往上找。以此类推。

    4. 如果到了xxhdpi目录还没有找到的话,就会去比自身屏幕密度低一级的目录去找,如果低一级的目录>=hdpi,找到了就拿来用。

    5. 如果没找到,就去mdpi目录去找,如果找到了,就拿来用。

    6. 如果没找到,就去默认的drawble目录里去找,如果找到了就拿来用。

    7. 如果没找到,再去最低的ldpi目录里去找。如果找到了,就拿来用。

    8. 如果没找到,那就是没找到了,图片无法显示。(不过一般不会出现这种现象,因为如果每个目录都没有这个图片的话,你是编译不过的)

          如果不是在对应目录里面找到的图片资源,要根据实际使用情况,进行显示,根据显示模式的不同,主要有以下两种情况:

    (1). MeasureSpec.EXACTLY

          这种情况下,图片的布局规则为match_parent或者是具体大小的数值(如layout_width =60dp, layout_height=60dp),这种情况下,图片的显示尺寸是固定的,所以显示的大小不会因为所在的资源文件夹dpi的不同而有所变化;例如图片A(尺寸60*60 大小2.02K)分别放置在xxhdpi文件夹和mdpi文件夹(Target Density),尺寸设置为layout_width =60dp, layout_height=60dp,显示分别如下:

           

               (a). mdpi文件夹下的显示                                                  (b). xxhdpi文件夹下的显示

                                 图2. Exactly模式下图像在不同Target Density下的显示

    (2). MeasureSpec.AT_MOST

          这种情况下,图片的布局规则为wrap_content。系统会根据图像内容的实际大小进行显示。同一张图片放在不同文件夹显示大小会有所不同,具体而言,同一张图像资源放置在mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi(Target Density)里面,显示的大小比较分别为:2:3:4:6:8

          例如wrap_content布局下,分别将同一张图像A(尺寸60*60 大小2.02K)放置在xxhdpi和hdpi资源文件夹中,显示效果如下:

      

                               (a). hdpi文件夹下的显示                                           (b). xxhdpi文件夹下的显示

                                                  图3. At Most模式下图像在不同Target Density下的显示

          但是,在进行多dpi适配的时候,本身放置在mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi里面的图像资源尺寸比较就是2:3:4:6:8(Source Density),二者完美抵消,所以当前模式下,只放置一张合适尺寸的图像资源在一个合适的文件夹(Target Density)里面,不会影响不同尺寸设备的显示效果

          例如wrap_content布局下,分别将分别将同一张图像A(尺寸60*60 大小2.02K)和图像B(尺寸30*30 大小2.02K)放置在xxhdpi和hdpi资源文件夹中,显示效果如下:

     

                                   (a).图像资源A的显示                                                      (b). 图像资源B的显示

                                 图4. At Most模式下图像在等比例Target Density和Source Density下的显示

    5. 总结

          在不同显示模式下,考虑到Exactly模式下图像资源的显示尺寸的固定性,以及At Most模式下Source Density和Target Density的抵消性,如果放置一张合适尺寸的图片资源在合适的文件夹,是可以实现不同设备的多dpi适配(显示的尺寸正常)。考虑到分辨率和使用率的问题,建议保留xxhdpi文件夹下的图像资源。

          这种方法可以在只保留一种dpi尺寸图像的情况下,实现对不同机型的图像显示适配,从而可以有效的压缩apk的尺寸。结合之前的一篇博文加载一张图片到ImageView到底占据多少内存,可以发现只保留一份合适dpi的图像的情况下,运行过程中,加载图像到内存中的内存占用也是一样的。也就是说,在功能和性能上讲,只保留一种dpi的图像,是可以完成多dpi适配的。

         但是,凡事都有但是。这种dpi适配的方式有两个问题:

         (1). 只保留一张图片,在进行多dpi适配的时候,有可能会造成图像显示分辨率过低,导致体验性问题。这种情况,一般会在低dpi图像(Source Density)到高dpi机型(Target Density)适配的时候会出现;

         (2). 在进行bitmap图像尺寸换算的时候,计算过程中,会造成内存和cpu的额外开销,这在低配机型上,有可能会在频繁地降采样过程中,导致OOM。

         以上两点要重点关注。

         当然,如果要是做某款特定机型的预制应用,那么,毫无疑问,直接保留一种dpi的图片资源。

    6. 参考文献

    1. http://www.cnblogs.com/zhwl/archive/2013/06/12/3132722.html

    2. http://blog.csdn.net/skykingf/article/details/45536143

    3. http://www.itnose.net/detail/6614353.html

    转载于:https://www.cnblogs.com/charles04/p/6914859.html

    展开全文
  • Android 屏幕适配,转化为dpi在本次项目中,我负责不同手机视图的匹配问题,我选择的是xml匹配方式。首先美工切图,直接切一套720*1280的。(也可以是1080的) 转化公式:px = dp *(dpi/160) 即320*480的分辨率...

    Android 屏幕适配,转化为dpi

    在本次项目中,我负责不同手机视图的匹配问题,我选择的是xml匹配方式。首先美工切图,直接切一套720*1280的。(也可以是1080的)
    转化公式:px = dp *(dpi/160)
    即320*480的分辨率的 dpi=160
    所以针对Android手机,我们需要分别计算4个不同的dimens.xml放在values-hdpi、values-mdpi、values-xhdpi、values-xxhdpi文件中,具体的你们用excel计算下就可以了。

    注意

    做完之后,运行软件,结果发现按上面的方式做了之后,对应分辨率的手机的显示没有任何的效果。后来,我查看帮助文档后,发现必须要在androidmainfest中进行如下代码的配置:

      <supports-screens
    
            android:anyDensity="true"
    
            android:largeScreens="true"
    
            android:normalScreens="true"
    
            android:resizeable="true"
    
            android:smallScreens="true"
    
            android:xlargeScreens="true" />

    如果没有这几行代码,不管你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。注意:由于android版本的不同,
    有些版本不支持xlargeScreens,可以直接将android:xlargeScreens=”true”去掉。

    展开全文
  • android应用 DPI不同的适配问题分析

    千次阅读 2016-05-26 21:05:53
    如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。 首先:你需要在AndroidManifest.xml文件的元素如下添加子元素 supports-...
      如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。

    首先:你需要在
    AndroidManifest.xml文件的<manifest>元素如下添加子元素

    <supports-screens android:largeScreens="true"

          android:normalScreens="true"android:anyDensity="true"

          android:smallScreens="true"></supports-screens>

        名如其意,以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。android:anyDensity="true" 这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。

    相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置android:anyDensity="false"Android系统会将240 x 320(低密度)转换为320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。

     

    2.细心的人会发现自android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false"则应用会将大小密度转变成中密度,从而去加载mdpi中的资源。这里同样,当android:anyDensity="false"则应用会去加载mdpi中的资源。

    总结一下:

    第一:android:anyDensity="true"系统会依据屏幕密度,自动去找对应的文件夹

    第二:android:anyDensity="false",

    (1)             如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源

    (2)             如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。

    (3)             如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源

     

    3. 注意上图各种文件夹的不同表示。

    drawable-hdpi 该图片即适用于横屏,也适用于竖屏

    drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源

    drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源


    3. 有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:

    DisplayMetrics metric = newDisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metric);

    int densityDpi =metric.densityDpi;  //屏幕密度DPI120 / 160 / 240

    然后可以在代码中为这几种密度分别设置便宜量

    但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。
    这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置
    值得一提的是:

       <dimen name="bitmap_common_topoffset">40dp</dimen>

       <dimen name="bitmap_common_bottomoffset">-14dp</dimen>
    这里的负数是完全起作用的,系统会认为它是一个负值


    4.各大手机厂商对于Android操作系统都有或多或少的改动,当然这些改动会对我们应用程序产生某些影响
      比如:
      (1)系统源代码中连接music服务的aidl文件所在包名:com.android.music
      (2)LG则可能将该aidl文件修改所在的包(例如修改为com.android.music.player),并且修改其中的文件内容(增加一个方法,或者减少几个方法,或者修改方法名称)那么我们的应用要想在LG的手机上发布,那么我们就必须改变所要连接的aidl文件,必须跟LG厂商修改的完全一致。
    展开全文
  • Android开发中有时会遇到在不同的手机上界面不适配的问题,控件忽大忽小,而且就连两个分辨率相同的手机有时也会出现这种问题。其实出现界面适配问题的原因,并不仅仅有分辨率,还有一个更重要的因素是:屏幕密度...
  • Android 三种UI适配方案 dp px 修改dpi

    千次阅读 2018-07-24 13:47:58
    Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解。刚好,近期准备对糗事百科Android客户端设计一套UI尺寸适配方案,可以和小...
  • android dpi calculator demins宽高适配

    千次阅读 2015-02-02 16:47:21
    http://coh.io/adpi/
  • 一、引言  Android的开源使厂商无需自行研发OS,大大降低了研发、生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一...二、适配可行性  早在Android设计之初就考虑到了这一点,为了让
  • 我这里用的是阿杜的dpi适配框架,DisplayUtil是常见的单位转换工具类,可自行搜索 TextView .setTextSize()方法传入的是sp值 查看源码  /**  * Set the default text size to the given value, interpreted as &...
  • 如何确定设备的res dpi 目标设备res-dpi信息获取方法: /** * 一般情况下的普通屏幕:ldpi是120,mdpi是... * 屏幕信息详情{@link android.util.DisplayMetrics} */ private String getResourcesDpiMsg(Cont...
  • Android 屏幕适配之不同res-dpi文件夹之间的关系 资源: 设备:华为青春版平板(FDR-A10w) 设备分辨率:1200*1920 适用资源文件夹:hdpi Google标准尺寸及参数 在安卓中,系统密度为160dpi的中密度手机屏幕...
  • 为什么80%的码农都做不了架构师?>>> ...
  • 由于android的碎片化严重,我们需要适配各种机型,各种不同大小,不同分辨率的...首先我们要了解一下Android屏幕的一些基本知识:dpdp也叫做dip即密度无关像素(Density Independent Pixels)dpidpi:屏幕像素密度是指...
  • android屏幕适配终极指南(二):DP和DPI

    千次阅读 2015-12-10 16:21:06
    上次我们讲了DPI,分辨率的一些事儿(有兴趣的童鞋可以去这里看:android屏幕适配终极指南(一):DPI,分辨率和屏幕尺寸)这次我们来讲点跟android有关的。 大家都知道,一个正常的工程,都会有如下几个文件夹: ps...
  • Android 适配

    2018-01-02 17:38:17
    之前一直没深究过屏幕适配,今天给深究下,记录下, 首先是dp这个是我们使用最多的适配,dp的定义 Density-independent pixel (dp)独立像素密度。标准是160dip.即1dp对应1个pixel,计算公式如:px = dp * (dpi / 160)...
  • Android开发中,往往为了适配dpi和分辨率,要写多套layout或者values,而鉴于dpi和分辨率的计算方式,很多时候适配的大部分工作都是简单的计算方面。譬如DPI从1.5到2.0,就是将所有dip、sp为单位的数值都乘以0.75...
  • 简单的介绍Android适配怎么做的。  先上一个图:   图中的屏幕尺寸为宽X英寸,长为Y英寸,则对角线长为Z,响应的横向的像素点为M,纵向的像素为N,对角线的像素点为L。  L/Z的值就是手机屏幕的像素密度。单位是...
  • 屏幕适配几乎是每个安卓开发界面模块都会遇到的问题。曾经我的apk在自己面前几个设备运行正常,一到用户那边...首先,说一下dpi,它是每英寸上的像素数或点数。sp,是用来设置字体大小的字体的缩放,dip,也就是dp,设
  • android 适配相关知识(一) – density dpi px dp dip sp解释
  • Android 屏幕适配总结

    2021-01-03 17:48:26
    Android 屏幕适配总结 Android ConstraintLayout 使用与适配(使用篇) Android ConstraintLayout 使用与适配适配篇) 目录 一、与屏幕相关的概念 1. 屏幕尺寸 2.屏幕分辨率 3. 屏幕像素密度(dpi) 二、为什么需要...
  • Android适配

    2016-07-22 17:32:44
    二、values-xxhdpi-1920X1080 这种以dpi加屏幕分辨率的适配方案是什么规律。 一、各种dpi之间的关系 【1】:由于网上以及存在一篇很好的文章,所以就不细讲了,这里给出链接地址:http://bl
  • 本来不懵的,网上越百度,自己就越懵逼了 ▲ 基础概念 : dp:最常用的长、宽、margin、padding等的单位 ... dpi:dots per inch,即每英寸上有多少个像素,也就是屏幕密度,具体计算下面写说 density:dens...
  • 一、引言  Android的开源使厂商无需自行研发OS,大大降低了研发、生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望。...二、适配可行性  早在Android设计之初就考虑到了这
  • Android屏幕适配相关(px,dp,dpi等)首先明确一点,就是屏幕的物理组成。一般的屏幕是由一个一个正方形的色块(可以理解成小灯)组成,叫像素,这里我们且将其称作色块吧。平时我们所说的1024*768、1920*1080等的...
  • android 适配

    2018-11-23 10:48:36
    通常称为 dpi(每英寸 点数)。例如, 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。   为简便起见,Android 将所有屏幕密度分组为六种通用密度: 低、中、高、超高、超超高和超...
  • Android app 适配

    2015-03-08 16:22:43
    android app适配 分辨率 dpi

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 821
精华内容 328
关键字:

dpi适配android