来csdn也有好久了,以前也只是看博客逛论坛从不发言论,俗称:僵尸用户吧。然后心里默默的欣赏着,哇塞,都是大牛,其实自己也有积累一些心得,但是又觉得类似的资源在网上一抓一大把,写得不好的话也没人来看,还有被喷的风险,也就自己存起来,懒得发表了,今天在一个朋友的鼓励下,小兮的第一篇博客诞生咯~ 希望能帮助到一些需要的朋友,大家共同进步~

Android用两种常规的属性来分类设备屏幕:即尺寸和像素密度。作为我们学习者和开发者,我们在设计应用的时候必须要考虑到我们所做的应用会被安装到不同屏幕尺寸和像素密度的设备上。因此,我们的应用应当包含可选的资源来优化应用外观,以便支持不同尺寸和像素密度的设备。

有四种广义上的尺寸:small、normal、large、xlarge。

同样也有四种广义的像素密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

为了声明用于不同屏幕的不同layouts布局和bitmaps资源,我们必须把这些可选的资源文件分别放在不同的目录,这一点类似于我们在国际化时不同语言strings的操作。

同时要注意屏幕的方向(landscape or portrait)也被认为是一种屏幕尺寸的变化,所以我们的应用应该修改layout布局来提高用户在不同屏幕方向上的体验。

为了提高在不同设备屏幕上的用户体验,我们应当为每一种你想要支持的屏幕尺寸创建一个独有的XML布局文件。每一布局文件应当存放到恰当的资源目录下,该目录以屏幕尺寸-<screen_size>作为后缀。例如,一个用于大屏幕的布局文件应当放在res/layout-large/目录下面。

这里需要注意的是:Android会自动缩放你的布局以便适配屏幕。这样,用于不同屏幕的布局文件就不必过多考虑UI元素的绝对大小,相反应当关注于布局的结构,这将直接影响用户体验(比如重要view视图的大小或位置应当相对于同级view视图)

目录中的布局文件名必须保持一致,但是它们的内容可以不同,以便提供优化的UI来支持相对应的屏幕尺寸

在app中简单地获得layout布局文件的引用,Android系统将根据你的app应用所运行设备的屏幕尺寸从适当的layout目录加载布局文件。

我们还应当为所有广义像素密度中的每一种都提供已经缩放好的适当的bitmap资源:低low, 中medium, 高high以及特高extra-high像素密度。这将使我们的应用在所有分辨率的设备上都获得优良的图形质量和呈现效果。

为了生成这些图片资源,我们应当以矢量图的格式来制作原始图片资源,然后根据它们缩放尺寸生成每一种分辨率的图片:

· 特高分辨率xhdpi: 2.0

· 高分辨率hdpi: 1.5

· 中分辨率mdpi: 1.0 (基准)

· 低分辨率ldpi: 0.75

这意味着如果我们要为特高分辨率设备生成一张200x200的图片,那么你需要为高分辨率设备生成150x150,中分辨率设备生成100x100,低分辨率设备生成75x75的图片。

然后把这些文件放置到恰当的资源目录中。以后我们在引用drawable里的图片的时候,系统将根据设备的分辨率自动选择适当的图片资源。

对于分辨率问题,官方给的解决办法是创建不同的layout文件夹,这就需要对每种分辨率的手机都要写一个布局文件,虽然看似解决了分辨率的问题,但是如果其中一处或多处有修改了,就要每个布局文件都要做出修改,这样就造成很大的麻烦。那么可以通过以下几种方式解决:

一)使用layout_weight

目前最为推荐的Android多屏幕自适应解决方案。

该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的layout_width或layout_height的优先级就越高(一般到100作用就不太明显了);一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级。

传统的layout_weight使用方法是将当前控件的layout_width和layout_height都设置成fill_parent,这样就可以把控件的显示比例完全交给layout_weight;这样使用的话,就出现了layout_weight越小,显示比例越大的情况(即权重越大,显示所占的效果越小)。不过对于2个控件还好,如果控件过多,且显示比例也不相同的时候,控制起来就比较麻烦了,毕竟反比不是那么好确定的。于是就有了现在最为流行的0px设值法。看似让人难以理解的layout_height=0px的写法,结合layout_weight,却可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。

二)清单文件配置:【不建议使用这种方式,需要对不同的界面写不同的布局】

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

<supports-screensandroid:largeScreens="true"

android:normalScreens="true"

android:anyDensity="true"

android:smallScreens="true"

android:xlargeScreens="true">

</supports-screens>

以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。

Android:anyDensity="true",这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi,xdpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源。而是会在大密度和小密度手机上加载中密度mdpi文件中的资源。

有时候会根据需要在代码中动态地设置某个值,可以在代码中为这几种密度分别设置偏移量,但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。这里地图的偏移量可以在values-xpdi,values-hpdi,values-mdpi,values-ldpi四种文件夹中的dimens.xml文件进行设置。

在屏幕适配的时候,通常我还会注意到几点:

首先我会尽量使用线性布局,相对布局,如果屏幕放不下了,可以使用ScrollView(可以上下拖动)

ScrowView使用时要注意:

在不同的屏幕上显示内容不同的情况,其实这个问题我们往往是用滚动视图来解决的,也就是ScrowView;需要注意的是ScrowView中使用layout_weight是无效的,既然使用ScrowView了,就把它里面的控件的大小都设成固定的吧。

另外,在指定宽高的时候,采用dip的单位,dp单位动态匹配

3、由于android代码中写的单位都是像素,所有需要通过工具类进行转化

4、尽量使用9-patch图,可以自动的依据图片上面显示的内容被拉伸和收缩。其中在编辑的时候,灰色区域是被拉伸的,上下两个点控制水平方向的拉伸,左右两点控制垂直方向的拉伸

工具在adt-bundle-windows-x86-20130522\sdk\tools目录下的draw9patch.bat

代码恒久远,Bug永流传~让我们在代码的世界里相亲相爱,加油加油~

兮°Android下的屏幕适配问题的一点心得相关推荐

  1. Android高手笔记-屏幕适配 UI优化

    Android高手笔记-屏幕适配 & UI优化 屏幕与适配 由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高: 屏幕适配究其根本 ...

  2. android 修改 dpi_Android屏幕适配重点盘点

    引子 屏幕适配是 android 开发/面试 绕不开的一个问题.本文 将屏幕适配的 知识要点完整展现给各位读者. 正文大纲 android需要做屏幕适配的原因 基础知识点(很重要) 屏幕适配攻略 正文 ...

  3. 《转》Android 今日头条屏幕适配方案终极版正式发布!

    概述 Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解. 刚好,近期准备对糗事百科Android客 ...

  4. 【Android】之屏幕适配

    前言 Android 系统能发展到今天,离不开其开源性,但是随着越来越多的设备接入 Android 系统,并对 Android 系统进行各种各样的定制,导致长期以来出现了各种碎片化严重的问题.例如,A ...

  5. Android笔记之屏幕适配全攻略

    Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配. 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对A ...

  6. Android性能优化—屏幕适配方案

    为什么要做适配?Android碎片化 Android系统碎片化:基于Google原生系统,小米定制的MIUI.魅族定制的flyme.华为定制的EMUI等等: Android机型屏幕尺寸碎片化:5寸.5 ...

  7. Android权威官方屏幕适配全攻略

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  8. android应用的屏幕适配,移动APP测试:Android屏幕适配问题一

    原标题:移动APP测试:Android屏幕适配问题一 Android中适配问题,是最常见和最难解决的事情,下面笔者就带着大家来说一下适配的相关操作. Android可以为当前的屏幕配置通过适当的方式管 ...

  9. android再谈屏幕适配之smallestwidth适配

    1.概述 Android发展至今,功能越来越多,越来越强大,不过碎片化的问题也是众所周知的越来越严重,如果是做大众应用,我相信屏幕适配肯定是我们不可回避的一个问题,当然了,网上的适配方案有很多,比如: ...

最新文章

  1. 剑桥大学国际学生事务部网站
  2. 接口可以继承抽象类吗_Python接口类的多继承以及抽象类的单继承
  3. 数字图像处理--图像旋转变换的推导
  4. Grub2中文指南4---开机影像和主题
  5. ICS lab9 TinyShell 的10条建议
  6. 最后一周!4000+HC免笔试!字节跳动2022校招研发提前批倒计时
  7. iPhone 的倒计时竟然会显示假时间?
  8. 求职软件测试工程师英文简历,软件测试工程师英文简历范文
  9. linux服务器如何查看cpu温度,在LINUX下面如何查看CPU的温度
  10. excel数据分组存到一个excel的多个sheet中
  11. matlab内置函数subs使用方法
  12. Mycat分库分表优缺点分析
  13. 全网疯传!最新高频100题汇总(附答案详解)
  14. 在苹果mac设备上office2021安装包安装教程图文
  15. 原型图都可以用什么软件做?分享这9款给你
  16. Kaggle比赛—预测 DNA、RNA 和蛋白质测量如何在单细胞中共同变化
  17. 系统程序员成长计划-管道过滤器(Pipe-And-Filter)模式
  18. 如何与离职员工面谈沟通?
  19. Android考勤毕业论文,基于android的考勤系统的设计与实现.doc
  20. HTML5画布行星图像映射

热门文章

  1. Worktile 中百万级实时消息推送服务的实现
  2. Android Studio-开发少年强国App(一)
  3. python成都_Python抓取成都房价信息
  4. webRTC H265浏览器播放器+metaRTC推流实现webRTC H265解决方案
  5. 一种提取HTML网页正文的方法
  6. 基于springboot的资产管理系统
  7. 安装CentOS7时选择install后直接黑屏的解决办法
  8. Pr 如何模拟水下音效
  9. 51nod 1205 流水线调度(Johnson规则)
  10. 推荐系统——(论文阅读笔记)YouTube的视频推荐系统