当前位置: 首页 > news >正文

android 屏幕适配问题

转自http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html

android <wbr>屏幕适配问题

如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。

 

首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素

<supports-screens android:largeScreens="true"

       android:normalScreens="true" android:anyDensity="true"

       android:smallScreens="true"></supports-screens>

 

     名如其意,以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。android:anyDensity="true" 这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。

 相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置android:anyDensity="false"Android系统会将240 x 320(低密度)转换为 320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。

 

2.细心的人会发现自android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false"则应用会将大小密度转变成中密度,从而去加载mdpi中的资源。这里同样,当android:anyDensity="false"则应用会去加载mdpi中的资源。

总结一下:

第一:android:anyDensity="true"系统会依据屏幕密度,自动去找对应的文件夹

第二:android:anyDensity="false",

(1)              如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源

(2)              如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。

(3)              如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源

 

3. 注意上图各种文件夹的不同表示。

drawable-hdpi 该图片即适用于横屏,也适用于竖屏

drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源

drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源

 

3. 有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:

 

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);

int densityDpi = metric.densityDpi;  // 屏幕密度DPI120 / 160 / 240

 

然后可以在代码中为这几种密度分别设置便宜量

 

但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。

这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置

值得一提的是:

    <dimen name="bitmap_common_topoffset">40dp</dimen>

    <dimen name="bitmap_common_bottomoffset">-14dp</dimen>

这里的负数是完全起作用的,系统会认为它是一个负值

 

4. 各大手机厂商对于Android操作系统都有或多或少的改动,当然这些改动会对我们应用程序产生某些影响

  比如:

   (1)系统源代码中连接music服务的aidl文件所在包名:com.android.music 

   (2)LG则可能将该aidl文件修改所在的包(例如修改为 com.android.music.player),并且修改其中的文件内容(增加一个方法,或者减少几个方法,或者修改方法名称)那么我们的应用要想在LG的手机上发布,那么我们就必须改变所要连接的aidl文件,必须跟LG厂商修改的完全一致。

 

相关文章:

  • .Net程序帮助文档制作
  • MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复)...
  • samba服务的安装与配置
  • 关于sqlmap的一些命令
  • Nothing2
  • Download Images Using NSURLConnection
  • 维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别
  • 【翻译笔记】在大集合中用MapReduce处理成对文档相似性
  • SCOI2013 多项式的运算 (BZOJ 3323)
  • iframe的使用小贴士
  • [转]操作复杂对象结构——访问者模式
  • 使用JDK开发Servlet程序
  • 程序员,你需要大量地阅读
  • map我觉得非水题-hdu-4329
  • php一些不是很常用的操作mysql的函数
  • Java,console输出实时的转向GUI textbox
  • JavaScript设计模式之工厂模式
  • Joomla 2.x, 3.x useful code cheatsheet
  • Meteor的表单提交:Form
  • MYSQL 的 IF 函数
  • node-glob通配符
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Otto开发初探——微服务依赖管理新利器
  • python docx文档转html页面
  • Redux系列x:源码分析
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue UI框架库开发介绍
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从tcpdump抓包看TCP/IP协议
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 和 || 运算
  • 前嗅ForeSpider教程:创建模板
  • 学习Vue.js的五个小例子
  • 一文看透浏览器架构
  • 以太坊客户端Geth命令参数详解
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)构建dubbo分布式平台-平台功能导图
  • (二十三)Flask之高频面试点
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net Memory Profiler的使用举例