`
fanguanghui
  • 浏览: 92636 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android 支持分辨率 支持多屏幕机制

阅读更多

在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+HTML5的移动Web项目高效开发探究

    鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作...

    Android系统序安装指南

    由于Android系统的手机和用户界面实在是太多,因此有些名词以及内容可能不尽相同,本文以原生界面为样本,使用其他第三方界面的机友可以参照原生界面进行操作。 B、在覆盖安装的时候请注意,由于APK文件有签名机制,...

    Android 4游戏编程入门经典

     5.5.1 处理不同屏幕大小和分辨率的问题  5.5.2 androidpixmap:人物的像素  5.5.3 androidgraphics:满足绘图需求  5.5.4 androidfastrenderview  5.6 androidgame:合并所有内容  5.7 小结 第6章 mr. nom...

    Android项目 Gallery实现异步加载网络图片 并只加载当前停止页面图.rar

    4. **图片适配**:支持多种图片格式,自动根据设备屏幕尺寸和分辨率进行图片适配,保证显示效果。 5. **可二次开发定制**:项目代码结构清晰,注释详细,方便开发者进行二次开发和定制。 **适用场景**: 适用于...

    android游戏编程入门

     分辨率的问题 169  5.5.2 AndroidPixmap:人物的  像素 174  5.5.3 AndroidGraphics:满足  绘图需求 174  5.5.4 AndroidFastRenderView 178  5.6 AndroidGame:合并所有  内容 180  5.7 小结 184  第6章...

    Android典型技术模块开发详解

    6.5.2 获取屏幕分辨率 6.5.3 剪贴板服务 6.5.4 电话服务 6.5.5 定时提醒服务 6.5.6 音频服务 6.5.7 传感器服务 6.5.8 位置服务 6.6 本章小结 第三篇 Android开发基础详解 第7章 常用控件 7.1 Button(按钮) 7.2 ...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--屏幕相关之Display类获取屏幕尺寸和分辨率 |--屏幕适配之ScrollView |--屏幕适配之像素dp和px之间转换 |--工具类之Log的封装类 |--工具类之不同log打印的封装 |--工具类之开启新的Activity |--布局加载器的获取 |...

    NetSupport School 课堂管理软件(简体中文版)

    教师可以使用预设的选项,更高级的用户可以访问新的视频编辑应用程序,在该程序中可以控制视频分辨率、音频质量、视频的起点和终点以及更多功能。 这些功能为构建一个录制的演示资料库提供了完善的工具,既可以在...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

Global site tag (gtag.js) - Google Analytics