Android提供了一套资源命名和编译机制,方便开发者适配多种手机屏幕和分辨率。
今天来讲一下如何将界面布局中的固定尺寸值适配至多种手机屏幕和分辨率。
界面布局中要做到良好的适配,最好不要出现固定的尺寸值,如果无法避免,那么我们怎样让这一固定尺寸值在不同手机屏幕和分辨率下进行相应变化呢?
使用res/values/dimens.xml来解决这一问题!
以下是一个示例dimens.xml:
<resources>
<dimen name="button_margin_top">15dp</dimen>
<dimen name="text_margin_top">10dp</dimen>
</resources>
在布局xml文件中,不要直接写死尺寸数值,而是用 "@dimen/xxx"来引用。
如果想在不同的手机屏幕大小和分辨率上改变这一值,可以创建不同的values-qualifier目录,将dimens.xml复制到相应的目录下,然后修改对应的尺寸值。 在运行时,系统会自动加载正确的目录下的尺寸值,做到正确适配。
不同的qualifier有以下几种:(详见 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
对了,有一个关于屏幕大小的定义:
-
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
这里我们要创建的是values目录,可以创建以下目录:
values-small
426dp x 320dp以上,470dp x 320dp 以下
values-normal
470dp x 320dp 以上, 640dp x 480dp以下
values-large
640dp x 480dp以上
values-xlarge
960dp x 720dp以上
在项目实作中,遇到一个问题,要对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。
如何进一步分开适配WVGA和QHD,还没有找到方法,有知道的朋友麻烦留言告诉一下,多谢。
分享到:
相关推荐
8. **测试和调试**:利用Android模拟器和真实设备,覆盖多种屏幕尺寸和分辨率进行测试,确保应用在各种环境下表现良好。 通过以上方法,开发者可以构建出适应各种屏幕尺寸和分辨率的Android应用,提升应用的兼容性...
在Android应用开发中,确保应用程序能够自适应各种手机屏幕大小和分辨率是至关重要的。这不仅可以提供优秀的用户体验,也是Google Play商店对应用质量的基本要求。以下是一些关键知识点,帮助开发者实现这一目标: ...
本文将基于提供的链接(http://blog.csdn.net/yan_startwith2015/article/details/52710176)以及“屏幕适配”的主题,深入探讨如何在Android应用中实现有效的屏幕分辨率适配。 首先,我们需要理解Android的屏幕...
总的来说,查看安卓手机屏幕分辨率的方法多种多样,无论是通过系统设置还是使用第三方应用,都能满足我们了解设备硬件信息的需求。在日常使用中,了解这些信息有助于我们更好地管理和优化设备,提升使用体验。
在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备拥有各种各样的屏幕尺寸、分辨率和像素密度。为了确保应用程序在所有设备上都能提供一致且良好的用户体验,开发者需要掌握有效的屏幕适配策略。...
Android系统提供了多种屏幕尺寸和密度的支持,因此开发者需要处理不同设备的适配问题。 在Delphi中,我们可以使用Android API来获取屏幕的物理分辨率。关键在于访问`Android.api.view.Display`类,它提供了关于设备...
本项目"Android应用源码之android多分辨率适配,判断平板还是手机,等比例缩小图片"提供了一个很好的学习资源,帮助开发者了解如何在Android平台上进行有效的屏幕适配和图像处理。 首先,Android多分辨率适配主要...
在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率。本资源包"Android屏幕适配资源"专注于解决这一问题,提供了values资源,能够帮助开发者轻松实现不同屏幕尺寸...
屏幕适配主要涉及到两个关键因素:分辨率和密度。分辨率是指屏幕的像素数量,而密度则是指单位面积内的像素数量。Android系统提供了多种尺寸和密度的屏幕,如ldpi(低密度)、mdpi(中等密度)、hdpi(高密度)、...
这份“智能手机屏幕尺寸和分辨率一览表”列举了不同尺寸屏幕的多种分辨率配置,涵盖了从2.8英寸到10英寸的各种设备。下面将详细讨论这些参数的含义及其对用户体验的影响。 首先,屏幕尺寸通常指的是屏幕对角线的...
在Android应用开发中,屏幕适配是一项至关重要的任务,因为它确保了应用在各种尺寸和分辨率的设备上都能正常显示和操作。"不同屏幕分辨率适配的values包"提供了专门针对不同屏幕尺寸和密度的资源文件,以实现更好的...
Android设备拥有多种屏幕尺寸和分辨率,包括小型、正常、大型和超大型等。为了确保应用在不同设备上都能正确显示,开发者需要进行多分辨率适配。这通常通过使用不同的资源目录(如`res/layout-sw600dp`,`res/...
Android系统支持多种屏幕尺寸和分辨率,包括小屏、中屏、大屏以及超大屏,对应的像素密度有ldpi(低密度)、mdpi(中密度)、hdpi(高密度)、xhdpi(超高密度)等。为了实现适配,开发者需要创建不同尺寸和密度的...
在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备有着广泛的屏幕尺寸和分辨率,从小型手机到大型平板电脑不一而足。一个良好的屏幕适配方案能够确保应用程序在不同设备上显示一致且用户体验良好。...
Android系统支持多种屏幕尺寸,如小屏手机、大屏手机、平板等。为了确保应用在这些设备上正常显示,我们需要使用到Android的资源目录结构,例如`res/layout`用于布局文件,`res/drawable`用于图片资源,`res/values`...
Android设备有多种屏幕尺寸,如小屏、中屏、大屏和超大屏,以及不同的分辨率,如HD、FHD、QHD等。开发者需要确保应用的UI元素在这些不同的屏幕上都能正确显示。 2. **百分比布局(Percent Support Library)** ...
在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着丰富的屏幕尺寸和分辨率。本篇文章将详细探讨几种常见的Android屏幕适配方案,帮助开发者解决不同设备间界面显示不一致的问题。 1. **使用...
总的来说,"android屏幕适配demo"是一个综合了多种屏幕适配技术的实例,包括使用dp单位、自定义适配器、多版本资源、`DisplayMetrics`以及优化的图像处理。通过理解和实践这个demo,开发者可以更好地掌握如何使自己...
在Android开发中,获取设备的屏幕分辨率是一项基本任务,这对于创建适配不同设备的应用至关重要。本文将详细讲解如何在Android中获取屏幕分辨率,并通过一个简单的示例来展示实现过程。 首先,我们需要理解Android...
在Android系统中,有多种屏幕密度,如低密度(ldpi)、中密度(mdpi)、高密度(hdpi)、超高清(xhdpi)等,它们与物理尺寸和像素密度有关。开发者需要确保应用在所有这些分辨率和密度下都能正常显示。 标题中的...