地址:http://developer.android.com/training/multiscreen/screendensities.html#TaskProvideAltBmp

安卓支持不同的屏幕大小

安卓支持非常多种屏幕,大小不一,有3.5’4.0’,5.0’。为了让写出来的app能够适配这些不同屏幕的大小,写程序时应该注意以下几点:

1.使用”wrap_content” 和“match_parent”

这里就要求尽量不要使用固定大小的值

2.在复杂界面布局时,如果能使用ReleativeLayout 就不要使用使用LinearLayout。一定要是软件使用Layout嵌套层次低!默认到了10层嵌套时就表示性能非常有问题了。

3.使用布局大小限定符(Size Qualifiers)

对于不同屏幕大小的布局文件,使用限定付来制定不同大小的布局

一般我们新建一个layout在如下位置:

res/layout/main.xml

如果使用支持大屏幕就会是在如下位置:

res/layout-large/main.xml

对于large的范围如下:

参考表:

Screen characteristic Qualifier Description
Size small Resources for small size screens.
normal Resources for normal size screens. (This is the baseline size.)
large Resources for large size screens.
xlarge Resources for extra-large size screens.
  • xlarge  至少  960dp x 720dp
  • large 至少  640dp x 480dp
  • normal  至少  470dp x 320dp
  • small  至少  426dp x 320dp

4.使用最小限定符(Smallest-width Qualifier) 【仅支持android 3.2以上设备】

如果你想制定,对于某个屏幕,如果其宽度大于600px,就要使用我制定的布局时就可以这样创建如下的布局文件:

res/layout-xw600dp/main.xml

5.使用布局别名(Layout Aliases)

如上所示,对于3.2一下的设备要适配不同的大小的屏幕,就需要如下3个文件:

res/layout/main.xml

res/layout-large/main.xml

res/layout-sw600dp/mian.xml

但其实res/layout-large/main.xml这个文件与res/layout-sw600dp/mian.xml文件都是一样的,为了避免这种浪费,你可以这样做:

先创建2个文件 :

res/layout/main.xml

res/layout/main_twopanes.xml

再增加这2个文件:

res/values-large/layout.xml:

<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>

res/values-sw600dp/layout.xml:

<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>

6.使用界面方向限定符(Orientation Qualifiers)

对于同一个设备屏幕,在不同方向的适配上(横向、竖向),其实也有一些工作需要做。对这种可以使用方向限定符比如有1个main.xml 对于不同方向可以创建这样的布局res/layout/main.xml 默认布局res/layout/main_horiz.xml 当设备横向时的布局

要适配这种情况可以添加如下文件:
默认情况
res/values/layouts.xml:
<resources>
<item name="main_layout" type="layout">@layout/main</item>
<bool name="has_two_panes">false</bool>
</resources>

横向时:
res/values-land/layouts.xml:
<resources>
<item name="main_layout" type="layout">@layout/main_horiz</item>
<bool name="has_two_panes">true</bool>
</resources>
安卓本身提供了两种限定符
Orientation land Resources for screens in the landscape orientation (wide aspect ratio).
port Resources for screens in the portrait orientation (tall aspect ratio).
7.使用.9.png
这种图片可以支持扩展拉伸

支持不同的屏幕密度(Densities)

安卓设备除了有不同的屏幕物理大小,同时,对于同一物理大小的设备,又可能会是不同的屏幕密度大小。换句话说同样是一块5.0英寸的屏幕,有的可能像素分辨率是 400X800,有的可能是1024X1920,或者其他

对于这种情况google要求我们要这样做:

1.使用与像素无关的像素单位

以前估计大家都喜欢使用px作为单位,现在提供了dp那么你可以这样认为,px已经不再支持了,只使用dp。对于字体就需要使用sp

2.使用可以替换的图片资源文件

对于不同的像素密度,我们应该提供不同的大小的图片资源,这样在适配多个界面时,才不至于同一个布局文件,在不同的像素密度的设备下,看起来差距很大。

对于一张在PC上图片大小为 100X100像素的image.png,为了让其能够适配不同屏幕的大小就应该对不同的密度创建不同的大小的图片

如果我们将其放在/res/darwable/image.png那么其实际大小在不同的分辨率下就会不同

  • 密度因子xhdpi: 2.0    需要创建一张在PC上大小为200X200的图片,并将其放入到  /res/drawable-xhdpi/image.png
  • 密度因子hdpi: 1.5      需要创建一张在PC上大小为150X150的图片,并将其放入到  /res/drawable-hdpi/image.png
  • 密度因子mdpi: 1.0 (baseline)   就是默认的
  • 密度因子ldpi: 0.75    需要创建一张在PC上大小为75X的图片,并将其放入到  /res/drawable-ldpi/image.png

其计算公式就是在PC上,分别对宽高乘以那个密度因子

google将屏幕的像素密度分为如下几种:

参考表:

Screen characteristic Qualifier Description
Density ldpi Resources for low-density (ldpi) screens (~120dpi).
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra-high-density (xhdpi) screens (~320dpi).
xxhdpi Resources for extra-extra-high-density (xxhdpi) screens (~480dpi).
xxxhdpi Resources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). Use this for the launcher icon only, see note above.
nodpi Resources for all densities. These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.
tvdpi Resources for screens somewhere between mdpi and hdpi; approximately 213dpi. This is not considered a "primary" density group. It is mostly intended for televisions and most apps shouldn't need it—providing mdpi and hdpi resources is sufficient for most apps and the system will scale them as appropriate. If you find it necessary to provide tvdpi resources, you should size them at a factor of 1.33*mdpi. For example, a 100px x 100px image for mdpi screens should be 133px x 133px for tvdpi.

【翻译】Best Practices for User interface android 适配不同屏幕、不同分辨率的更多相关文章

  1. Android适配(屏幕适配、国际化适配)-转

    首先来说一下Android的屏幕适配: 关于Android屏幕的一些基本概念知识,自行充电..在此只介绍实际开发过程中的使用 1.说到Android的屏幕适配,首当其冲的就是图片的适配 图片适配遵循两 ...

  2. Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi

    Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ...

  3. 【Android Api 翻译3】android api 完整翻译之Application Fundamentals (学习android必须知道的)

    Android应用程序是用Java编程语言编写的.Android SDK工具把应用程序的代码.数据和资源文件一起编译到一个Android程序包中(这个程序包是以.apk为后缀的归档文件),一个Andr ...

  4. android多分辨率多屏幕密度下UI适配方案

    相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表 ...

  5. 如何指定一个和你的Android应用程序相适配的屏幕配置

    原文:http://android.eoe.cn/topic/android_sdk 描述: 指定每个与该应用程序兼容的屏幕配置.一个配置清单中只能有一个标签的实例,但是它能够包含多个元素.每个元素指 ...

  6. Android界面设计适配不同屏幕的尺寸和密度解读

    Android是运行在各种提供不同的屏幕尺寸和密度的设备.Android系统提供跨设备的统一开发环境和处理大部分的工作,以调整每个应用程序的用户界面,以在其上显示的画面. 同时,该系统提供了API,允 ...

  7. Android适配不同的设备

    感谢原作者的整理: http://blog.csdn.net/chenyjays/article/details/41308887 适配不同的语言 把UI中的字符串存储在外部文件,通过代码提取. 创建 ...

  8. Android Camera多屏幕适配解决预览照片拉伸

    通常,拍照预览页面的照片拉伸主要与下面两个因素有关: 1.     Surfaceview的大小 2.     Camera中的Preview的大小 如下图:     图中preview显示的是手机支 ...

  9. Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 异常

    1. 异常描述 FATAL EXCEPTION: main Process: com.whereru.greengrass.goforit, PID: 13847 java.lang.RuntimeE ...

随机推荐

  1. 搜索【洛谷P2845】 [USACO15DEC]Switching on the Lights 开关灯

    P2845 [USACO15DEC]Switching on the Lights 开关灯 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一 ...

  2. LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego

    [bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...

  3. 数据结构20:KMP算法(快速模式匹配算法)详解

    通过上一节的介绍,学习了串的普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为“指针回溯”),同时 ...

  4. 数据结构11: 栈(Stack)的概念和应用及C语言实现

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...

  5. Kibana问题记录:yarn test 运行报错 error Trailing spaces not allowed no-trailing-spaces

    这个错误就是说,在指定的代码后面有太多无用空格了,你只要把那些空格删掉就行了. 如果你用的是vscode,推荐安装一个ESLint插件,格式话一下你的代码就可以了.

  6. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型的各种成员

    [Class中,可能包含的成员] 常量, 字段, 实例构造器, 类型构造器, 方法, 操作符重载, 转换操作符, 属性, 事件, 类型(Class)

  7. SQL Connect By 的例子

    看到一个较为通俗易懂的connect by的例子,是百度知道的答案,稍微整理了一下.我自己这样理解:connect by prior "id" = "p_id" ...

  8. IP 地址子网划分

    1.1 IP地址子网划分 1)容易造成地址浪费 2)容易产生严重的广播风暴 3)会造成路由器转发压力过大 1.2     庞大的网段需要进行子网划分 1)可以有效避免地址浪费 2)有效减少广播风暴的产 ...

  9. 停止mysql服务

    停止mysql服务windowsnet stop mysql (service mysqld stop win10不能用) linux /etc/init.d/mysqld stop

  10. CROSS APPLY和 OUTER APPLY 区别详解

    SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢? 我们知道有个 SQL Server 2000 中有个 cross joi ...