Android笔记:多分辨率适配及碎片化问题解决方案总结

简介:

一、适配多分辨率

1.官网介绍: http://developer.android.com/guide/practices/screens_support.html#qualifiers


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.
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).
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.
Orientation land Resources for screens in the landscape orientation (wide aspect ratio).
port Resources for screens in the portrait orientation (tall aspect ratio).
Aspect ratio long Resources for screens that have a significantly taller or wider aspect ratio (when in portrait or landscape orientation, respectively) than the baseline screen configuration.
notlong Resources for use screens that have an aspect ratio that is similar to the baseline screen configuration.


关于布局文件适配的一些示例:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res
/layout-small/my_layout.xml       // layout for small screen size
res
/layout-large/my_layout.xml       // layout for large screen size
res
/layout-xlarge/my_layout.xml      // layout for extra large screen size
res
/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res
/drawable-mdpi/my_icon.png        // bitmap for medium density
res
/drawable-hdpi/my_icon.png        // bitmap for high density
res
/drawable-xhdpi/my_icon.png       // bitmap for extra high density


密度与尺寸定义的大概图示:

wKiom1PzC-LjkidpAADrjR7F7ho911.jpg







2.关于屏幕大小的定义:

  • xlarge screens are at least 960dp x 720dp

  • large screens are at least 640dp x 480dp

  • normal screens are at least 470dp x 320dp

  • small screens are at least 426dp x 320dp

在项目实作中,遇到一个问题,要对HVGA(320 * 480 px, density = 160), WVGA(480*800 px, density = 240) 和 QHD (540*960 px, density = 240) 进行适配, 换算成dp后,可以看到三种分辨率都是属于values-normal范围的,这下麻烦了,这三种屏幕尺寸差异很大,界面适配上必须要对应不同的值,怎么办呢?

 

解决方法很简单,实际上qualifier是可以配置多个的,之间以"-"连接。

 

 将values-normal 分成两个目录,即values-normal-mdpi,  values-normal-hdpi, 其下分别对应相应的dimens.xml即可。values-normal-mdpi 对应 HVGA, values-normal-hdpi对应WVGA和QHD。


3.图标大小的设定

针对不同密度创建的图标,你应该遵循四个广义密度之间的3:4:6:8缩放比例。例如,如果你有一个48 x48像素的图标对应于mdpi,则其他尺寸应该是:

  • 36x36 for low-density

  • 48x48 for medium-density

  • 72x72 for high-density

  • 96x96 for extra high-density



4.比较典型的屏幕宽度尺寸

  • 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).

  • 480dp: a tweener tablet like the Streak (480x800 mdpi).

  • 600dp: a 7” tablet (600x1024 mdpi).

  • 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).


5.尺寸与密度的一般对应



Low density (120), ldpi Medium density (160), mdpi High density (240), hdpi Extra high density (320), xhdpi
Smallscreen QVGA (240x320)
480x640
Normalscreen WQVGA400 (240x400) 
WQVGA432 (240x432)
HVGA (320x480) WVGA800 (480x800) 
WVGA854 (480x854) 
600x1024
640x960
Largescreen WVGA800** (480x800)
WVGA854** (480x854)
WVGA800* (480x800) 
WVGA854* (480x854) 
600x1024


Extra Largescreen 1024x600 WXGA (1280x800)




6.一个比较有代表性的软件资源包结构图

wKioL1PzDrjBeiH0AAMIjziDjZY780.jpg


7.drawable-nodpi的作用 

把一些不能被拉伸的图片放在 drawable-nodpi 中,此图片将不会被放大,以原大小显示。

但是宽和高要写wrap_content,不要写dip。



8.配置AndroidManifest.xml使应用支持多分辨率

1
2
3
4
5
           <supports-screens 
            android:largeScreens= "true"  
             android:normalScreens= "true" 
             android:smallScreens= "true"  
             android:anyDensity= "true" />



9.Android屏幕图标尺寸一般规范

(1). 程序启动图标:

ldpi (120 dpi)  小屏    36 x 36 px

mdpi (160 dpi)  中屏    48 x 48 px

hdpi (240 dpi)  大屏    72 x 72 px

xhdpi (320 dpi) 特大屏  96 x 96 px


(2).底部菜单图标

wKiom1P1t4nSYODXAABnS62deMQ496.jpg

大屏:

1. 完整图片(红色): 72 x 72 px

2. 图标(蓝色): 48 x 48 px

3. 图标外边框(粉色): 44 x 44 px


中屏:

1. 完整图片: 48 x 48 px

2. 图标: 32 x 32 px

3. 图标外边框: 30 x 30 px


小屏:

1. 完整图片: 36 x 36 px

2. 图标: 24 x 24 px

3. 图标外边框: 22 x 22 px


(3). 弹出对话框顶部图标

Low density screen (ldpi)        小屏  24 x 24 px

Medium density screen (mdpi)     中屏  32 x 32 px

High density screen (hdpi)       大屏  48 x 48 px



(4). 长列表内部列表项图标

Low density screen (ldpi)     小屏  24 x 24 px

Medium density screen (mdpi)  中屏  32 x 32 px

High density screen (hdpi)    大屏  48 x 48 px



(5). 底部或顶部tab标签图标

wKiom1P1t5mBf_u6AAA4faX0q3o305.jpg

大屏 (hdpi):

1. 完整图片(红色): 48 x 48 px

2. 图标(蓝色): 42 x 42 px


中屏 (mdpi):

1. 完整图片: 32 x 32 px

2. 图标: 28 x 28 px


小屏(ldpi):

1. 完整图片: 24 x 24 px

2. 图标: 22 x 22 px



(6). 底部状态栏图标

ldpi (120 dpi)   小屏     18 x 18 px 

mdpi (160 dpi)   中屏     24 x 24 px 

hdpi (240 dpi)   大屏     36 x 36 px 

xhdpi (320 dpi)  特大屏   48 x 48 px  






本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1543195,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
探索安卓和iOS应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
2月前
|
安全 搜索推荐 程序员
深入探索Android系统的碎片化问题及其解决方案
在移动操作系统的世界中,Android以其开放性和灵活性赢得了广泛的市场份额。然而,这种开放性也带来了一个众所周知的问题——系统碎片化。本文旨在探讨Android系统碎片化的现状、成因以及可能的解决方案,为开发者和用户提供一种全新的视角来理解这一现象。通过分析不同版本的Android系统分布、硬件多样性以及更新机制的影响,我们提出了一系列针对性的策略,旨在减少碎片化带来的影响,提升用户体验。
|
3月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
100 7
|
4月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
|
3月前
|
Android开发
Android开发显示头部Bar的需求解决方案--Android应用实战
Android开发显示头部Bar的需求解决方案--Android应用实战
27 0
|
4月前
|
调度 Android开发 UED
Android经典实战之Android 14前台服务适配
本文介绍了在Android 14中适配前台服务的关键步骤与最佳实践,包括指定服务类型、请求权限、优化用户体验及使用WorkManager等。通过遵循这些指南,确保应用在新系统上顺畅运行并提升用户体验。
282 6
|
5月前
|
前端开发 开发工具 Android开发
探索安卓与iOS应用开发:跨平台解决方案的崛起
【8月更文挑战第27天】在移动设备日益普及的今天,安卓和iOS系统占据了市场的主导地位。开发者们面临着一个重要问题:是选择专注于单一平台,还是寻找一种能够同时覆盖两大系统的解决方案?本文将探讨跨平台开发工具的优势,分析它们如何改变了移动应用的开发格局,并分享一些实用的开发技巧。无论你是新手还是资深开发者,这篇文章都将为你提供有价值的见解和建议。
|
编解码 Android开发 开发工具
不同Android版本设备正确获取屏幕分辨率的通用方法
不同Android版本设备正确获取屏幕分辨率的通用方法         谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.2\2.3\4.0\4.1使用的方法一样吗?       答案是否定的。
1233 0
|
27天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
53 19
|
27天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
56 14