android适配_相关概念和应用

有几个概念以及相关公式先理解下:
1、dp:device independent pixels(设备独立像素),是像素和密度的比
dp = px / density

2、dpi(dot per inch每英寸的点数)和ppi相等,是屏幕对角线的像素数和屏幕尺寸的比例
dpi = ppi = (√(screenHeight^2 + screenWidth^2)) / 屏幕大小(inch)

3、密度是dpi和160的比例
density = dpi / 160

4、英寸是相许和dpi或ppi的比例
inch = px / dpi = px / ppi

适配,按自己理解的只有以下两种情况(有不同见解可以补充)

先看第一种情况(屏幕宽度相同,分辨率不同)

1、一款分辨率是480 * 800的手机,宽 480,高800,高度一般会受虚拟键等的影响,但宽度是一定的,以宽度为标准,所以,一般都是按宽度进行区分

160dpi 屏幕宽度为3 inch,dp为480dp

2、另外一款分辨率 720 * 1280的手机宽 720,高1280

240dpi 屏幕宽度为3 inch,dp同样为480dp

所以,两款手机屏幕大小一样,但是分辨率不同,因此,相同的布局文件相同的dimens文件完全适用于这两款手机
但是图片呢,相同的图片,分别放在drawable-mdpi和drawable-hdpi,
在第一款手机上显示正常,在第二款手机上却会显得小,所以,高密度的图片应该做大
(注:如果只有一套图,比如放在drawable-mdpi中,图片显示大小是相同的)

第二种情况(分辨率相同,屏幕宽度不同)

1、一款分辨率 720 * 1280的手机宽 720,高1280
160dpi 屏幕宽度为4.5 inch,dp为720dp

2、一款分辨率 720 * 1280的手机宽 720,高1280
240dpi 屏幕宽度为3 inch,dp为480dp

借上一种情况结果,图片会做不同尺寸,现在布局和尺寸可能会不同了
所以,布局和尺寸需要进行适配,如果不同大小的屏幕需要不同布局。
例如第一款手机,可能是平板大小了,布局和手机不同,layout不能适用于平板,
因此,需要重新建立文件夹重新布局例如 layout-sw720dp
第二款手机,布局也不同,需要建立layout-sw480dp

对于不同屏幕尺寸,view的尺寸可能也会有不同
在values中会有dimen.xml文件,因此尺寸也需要适配
可能会建立如下目录values-sw720dp、values-sw480dp

sw720dp、sw480dp的格式如下:
sw<N>dp (smallestWidth)屏幕横竖屏切换,最小屏幕宽度不会发生变化
w<N>dp 屏幕横竖屏切换,屏幕宽度会根据横竖屏发生变化

其中的N指的是屏幕宽度,单位dp,720px不同密度,宽度不同,所以会有不同目录
这种使用方式是3.2才开始使用,之前是使用small、normal、large、xlarge这种
目录名称举例:
layout-sw720dp、layout-sw480dp、layout-sw320dp、layout-large、values-sw480dp等

总结,就目前自己了解的适配就这两种情况
1、屏幕宽度相同,分辨率不同(适配不同密度图片、不同密度的样式、主题等)
2、分辨率相同,屏幕宽度不同(适配不同布局、适配不同尺寸)

另外,从android生成的目录结构来看,应该还有第三种,适配不同版本
如values目录会有values-v11、values-v14,里边只有style.xml,
是不同的主题,可能是不同版本的android,主题有新增的,想在新版本使用新ui界面,做的适配,未经证实,仅是猜测。

推荐以下文档,研读:

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/training/multiscreen/index.html

时间: 2024-10-24 06:34:16

android适配_相关概念和应用的相关文章

Android适配方案小结(三)

在Android适配方案小结(一).(二)中,我们了解了一些基本概念. 那么在具体开发中,我们应该注意什么呢. 首先,我们必须要知道,其实适配的关键在于两点: (1)不同分辨率设备的适配,这点在单位的使用上用dp.sp以及图片资源存放于不同的drawable文件夹就可以解决问题: (2)不同尺寸的适配,这点主要靠将相关值以及布局文件放置于不同的文件夹中来解决. 2.1 values文件夹 可以在工程下创建不同的values文件夹:values-sw480dp, values-sw600dp, v

Android适配器之DataModifyHelper数据操作类的封装

编写适配器代码时常常被以下几个问题所困扰: 1.业务层和适配器中对同一组数据进行维护,难以管理 2.在业务层针对数据进行修改后必须通知适配器更新,否则提示The content of the adapter has changed but ListView did not receive anotification 3.业务层修改数据时充斥大量的非空&数据标准化等冗余代码 针对前两个问题,可以将数据交由适配器去管理,业务层对数据的增删改查均通过适配器进行处理,这样仅需要维护好adapter中的数

Android 适配(一)

一.Android适配基础参数 1.常见分辨率(px) oppx 2340x1080 oppR15 2280x1080 oppor11sp 2160*1080 1080*1920 (主流屏幕16:9) 1080*2160 18:9 手机主流分辨率: 1080*2160 高端 16:9 手机主流分辨率: 1080P (1080*1920) 或 2K (1440*2560) 分辨率 低端 16:9 手机主流分辨率:720P (720*1280) 分辨率 退到五六年前,一般 Android 手机的主流

手机卫士13_屏幕适配_异常处理_盈利模式_混淆加密

今天是手机卫士最后一天 1,简易屏幕适配: ①使用线性,相对,帧布局,这三种常用布局在所有设备上几乎可以完整实现,多使用dp,sp,不要使用像素,dp,sp会自动适应屏幕 ②浮动窗体显示的距离问题:它show出来的距离就是像素,所以显示距离不会适应屏幕. 代码里接收的单位一般都是像素. 解决方式:把输入的数字转换成dp单位. 得到像素密度*像素 获得dp数据,根据屏幕实现的像素效果 通过工具类去转换成dp数据DesityUtils 2,应用程序的异常处理: 2.1 alpha版本:小范围的内部测

Android适配不同的设备

感谢原作者的整理: http://blog.csdn.net/chenyjays/article/details/41308887 适配不同的语言 把UI中的字符串存储在外部文件,通过代码提取. 创建区域设置目录和字符串文件 为了支持多国语言,在res/中创建一个额外的values目录以连字符和ISO国家代码结尾命名,比如values-es/ 是为语言代码为"es"的区域放置简单的资源文件的目录.Android会在运行时根据设备的区域设置,加载相应的资源. 若你决定支持某种语言,则需要

Demo1_iOS9网络适配_改用更安全的HTTPS

iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一 使用TLS 1.2 SSL.采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation 框架下的相关网络请求,将不再默认使用 Http 等不安全的网络协议,而默认采用 TLS 1.2.服务器因此需要更新,以解析相关数据.如不更新,可通过在 Info.plist 中声明,倒退回不安全的网络请求. 在讨论之前,跟往常一样,先说下iOS程序猿们最关心的问题: 跟我有毛关系?需要我加班吗?!

Android适配方案小结(二)

该节主要记录从代码中获取与屏幕适配相关的各个参数: Java代码如下 public class ScreenUtil { /** * Note: * 只有activity可以使用getWindowManager,否则应该使用 * Context.getResources().getDisplayMetrics()来获取 */ /** * 获取DisplayMetric相关参数 * @param context * @return */ public static String getMetric

Android适配

这篇文章主要讲两点: 一.xxxhdpi.560dpi.xxhdpi.xhdpi.hdpi.mdpi.ldpi (还有tvdpi 主要用于电视,不去讨论) 在某个dpi缺失的情况下,如果去找寻. 二.values-xxhdpi-1920X1080 这种以dpi加屏幕分辨率的适配方案是什么规律. 一.各种dpi之间的关系 [1]:由于网上以及存在一篇很好的文章,所以就不细讲了,这里给出链接地址:http://blog.csdn.net/a220315410/article/details/1189

Android 适配toolbar后windowSoftInputMode=&quot;adjustResize&quot; 不生效

一.发现问题 项目中适配了Android最新的MaterialDesign,其中最主要修改的一个就是将actionbar 替换成了toolbar,如果对toolbar没有了解的话可以参考 这篇文章 适配toolbar,请看 这篇文章 由于我们要用toolbar替代actionbar,所以我们首先要做的就是隐藏actionbar,我们在theme中声明 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActio