在Android上进行开发,免不了要支持多分辨率屏幕支持,所以就不得不了解一下Android 的多屏幕支持机制。
首先来了解一下相关的术语。
1.Screen size 屏幕实际尺寸,Android的屏幕实际尺寸分为3个通用的尺寸。
2.Aspect ratio 长宽比
3.Resolution 分辨率
4.Density 密度
5.Density-independent pixel 密度无关的像素
介绍:Adnroid1.6或以上SDK,在AndroidManifest.xml中提供新的一个元素<supports-screens>用于支持多屏幕机制。
<supports-screens
android:largeScreens="true" //是否支持大屏
android:normalScreens="true" //是否支持中屏
android:smallScreens="true" //是否支持小屏
android:anyDensity="true" //是否支持多种不同密度
/>
Android提供3种方式处理屏幕自适应
一.预缩放的资源(基于尺寸和密度去寻找图片)
1.如果找到相应的尺寸和密度,则利用这些图片进行无缩放小时。
2.如果没法找到相应的尺寸,而找到密度,则认为该图片尺寸为 "medium",利用缩放这个图片显示。
3.如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。
二.自动缩放的像素尺寸和坐标(密度兼容)
1.如果应用程序不支持不同密度android:anyDensity="false",系统自动缩放图片尺寸和这个图片的坐标。
(代码中体现)
2.对于预缩放的资源,当android:anyDensity="false",也不生效。
3.android:anyDensity="false",只对密度兼容起作用,尺寸兼容没效果
三.兼容模式显示在大屏幕,尺寸(尺寸兼容)
1.对于你在<supports-screens>声明不支持的大屏幕,而这个屏幕尺寸是normal的话,系统使用尺寸为 ("normal")和密度为("medium)显示。
2. 对于你在<supports-screens>声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统同样使用尺寸为
("normal")和密度为("medium)显示,不过会出现一层黑色的背景。不是居中显示。
密度独立:
系统默认应用支持DIP单位的,三个使用DIP的地方:
1.加载资源时,使用DIP实现预缩放的资源。
2.在Layout使用DIP,系统自动完成缩放。
3.在应用程序中,自动缩放一些绝对像素。
(只有在android:anyDensity="false"生效)即屏幕自适应方式二
4.像素单位都使用DIP,文本单位使用SP
最佳屏幕独立实践:
1.使用wrap_content, fill_parent 和使用dip作为像素单位in XML layout files。
2.避免使用AbsoluteLayout
3.在代码中,不要使用像素数字硬编码,而是要通过dip转换为px。
例子:
你使用手势分析器分析一个scroll手势,假如,你滚动的距离是16px。
1.在一个160dip的屏幕中,你实际移动距离 16px / 160dpi = 1/10th of an inch (or 2.5 mm)
2.在一个240dip的屏幕中,你实际移动距离 16px / 240dpi = 1/15th of an inch (or 1.7 mm)
// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;
// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale);
4.使用密度和/或尺寸特定资源(通过文件夹)
关于预缩放或者自动缩放图片或9格图
1.系统是一定对会资源包下的图片进行合理的缩放。
例如:一张240x240高密度图片,显示在中密度的屏幕上,图片大小自动变为160x160。
2.你在API中不会得到被缩放后的图片尺寸,得到还是你原来图片的尺寸。
3.如果你不想系统自动帮你缩放图片,可以建立一个res/drawable-nodpi文件夹,存放你的图片。
4.也可以通过BitmapFactory.Options 完成系统自动缩放图片或9格图(在画图时)。
5.自动缩放图片比预缩放花费更多CPU,但是用更少内存(RAM or ROM ?)
分享到:
相关推荐
Android 多分辨率适配方案 Android 设计之初就考虑到了 UI 在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确。UI 适配主要受平台两个因素的影响:屏幕尺寸(屏幕的像素宽度及像素...
在Android开发过程中,屏幕...合理运用此工具,结合Android的屏幕适配机制,可以让你的应用在众多设备上呈现出一致且美观的用户体验。记得在使用过程中阅读并理解代码和注释,这将对你的Android开发技能提升大有裨益。
在Android开发中,面对各种不同尺寸和分辨率的设备,如何实现多屏幕多分辨率的适配是开发者必须掌握的关键技能。Android系统提供了丰富的机制来帮助我们处理这个问题,使得应用能够在各种屏幕上正常显示,提供良好的...
Android 多分辨率多密度下 UI 适配方案 Android 设计之初就考虑到了 UI 在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确。UI 适配主要受平台两个因素的影响:屏幕尺寸(屏幕的...
在Android开发中,屏幕适配是一项重要的工作,因为Android设备有着多种不同的屏幕尺寸和分辨率。"android屏幕分辨率适配,静态xml制作工具"是专为解决这个问题而设计的一个实用工具,它可以帮助开发者快速生成适用于...
在Android开发中,面对各种设备的不同屏幕尺寸和分辨率,实现多分辨率适配是一项重要的任务。Android系统虽然提供了兼容不同屏幕的机制,但开发者仍需要掌握一些策略和技巧来确保应用在各种设备上都能正常显示和良好...
总之,Android的屏幕分辨率适配机制要求开发者充分考虑不同设备的屏幕尺寸和密度,为每种类型提供相应的资源。图标设计需要遵循一定的规则,确保在不同设备上都能呈现出一致且高质量的视觉效果。通过合理的资源管理...
本教程“玩转Android多分辨率规格的界面设计教程”旨在帮助开发者理解Android系统的屏幕适配机制,并提供实用的方法来确保应用在各种设备上都能呈现出良好的视觉效果。 首先,Android系统采用密度独立像素(Density...
"android分辨率适配源码+apk包" 提供了一个解决这一问题的实例,它包含源码和可安装的APK应用,帮助开发者了解如何在Android应用中实现自适应不同分辨率的屏幕。 首先,我们来理解分辨率适配的基本概念。Android...
本项目"Android应用源码之android多分辨率适配,判断平板还是手机,等比例缩小图片"提供了一个很好的学习资源,帮助开发者了解如何在Android平台上进行有效的屏幕适配和图像处理。 首先,Android多分辨率适配主要...
在IT行业中,尤其是在软件开发领域,尤其是Android应用开发,多屏幕多分辨率的支持是至关重要的。随着移动设备种类的多样化,开发者需要确保他们的应用程序能够在不同尺寸和分辨率的屏幕上正常显示和运行。这篇博客...
在Android系统中,由于设备的多样性,同一张图片在不同分辨率的屏幕上显示时,为了保持清晰度和视觉效果,往往需要有不同的尺寸版本。这涉及到Android的资源适配机制,包括密度独立像素(DP, Density Independent ...
总之,Android自适应分辨率涉及到屏幕尺寸、像素密度、资源适配、布局管理等多个方面。开发者需要理解这些概念,并结合Android提供的工具和机制,才能创建出能在各种设备上良好运行的应用。通过不断实践和优化,你的...
不过,这种方式在低分辨率设备上可能存在色彩不一致的问题,可能与Android的图像缩小机制有关。 实现方式之二是使用9-Patch图像。9-Patch是一种特殊的PNG图片格式,允许指定图片的某些部分可拉伸,以适应不同尺寸的...
Android系统支持多种屏幕尺寸,如小屏手机、大屏手机、平板等。为了确保应用在这些设备上正常显示,我们需要使用到Android的资源目录结构,例如`res/layout`用于布局文件,`res/drawable`用于图片资源,`res/values`...
这个"android分辨率xml生成工具"的源码module就是为了简化这一过程而设计的。它允许开发者快速为各种屏幕尺寸生成相应的资源文件,提高开发效率。 首先,我们需要理解Android系统如何处理屏幕分辨率。Android支持...
Android字体大小自适应不同分辨率的解决办法是指在不同的Android设备上,根据屏幕分辨率和尺寸变化,自动调整字体大小的技术。这个解决办法是通过使用Android的资源文件夹机制和dimens.xml文件来实现的。 在 ...