`
xun005
  • 浏览: 39543 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android应用程序适配在不同的手机上(转)

 
阅读更多

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


首先:你需要在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;  // 屏幕密度DPI(120 / 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厂商修改的完全一致。

分享到:
评论

相关推荐

    基于IOS、Android手机设备应用程序交互适配设计研究报告.docx

    基于IOS、Android手机设备应用程序交互适配设计研究报告.docx

    Android 应用的终端适配

    系统的介绍了怎么适配程序,不同类型的手机,不同大小的手机。用一套代码就搞定。

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说是一把双刃剑 4 1.3 Android和Linux ...

    android开发介及心得.docx

    Android应用程序可以使用Java编程语言开发,通过Android软件开发工具包(SDK)进行构建。以下是Android开发的一些关键方面: 学习Android生命周期: 理解Activity和Fragment的生命周期是开发Android应用的基础。这...

    android系统原理及开发要点详解

     第14章“Android应用程序的主要方面”,介绍Android应用程序层开发的各个方面,基本上是横向内容,包括应用程序的基本控制、各种UI元素的使用、图形API使用3个方面的内容。  第15章“Android应用程序的设计思想”...

    Android检查手机有没有安装某应用的方法

    本文实例讲述了Android检查手机有没有安装某应用的方法。分享给大家供大家参考,具体如下: 手机用户尤其厌烦手动输入大量信息,在一个程序中可以调用其他程序或功能往往可以给用户更好的用户体验,让用户倍感亲切,...

    蓝牙通信 Android开发实现手机间通过蓝牙传输文件

    通过Android开发实现手机间通过蓝牙传输文件 实验小作业,详细分析 安卓平台提供对蓝牙的通讯栈的支持,允许设备和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接...

    Raspberry pi 小车android客户端程序.zip

    跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和...

    BaseProject 是一个Android基础程序架构库.zip

    跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和...

    2010年谢彦的android笔记

    4.1.3 android应用的启动过程 127 4.2 服务的原理与使用 128 4.3 键盘事件处理 130 4.4 包管理 131 4.5 传感器 132 4.6 浅析dalvik虚拟机JIT技术的实现 133 4.7 应用程序的签名(Signature) 135 4.8 应用的权限 138 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Webkit 一个开源的浏览器引擎,在手机上的应用十分广泛 Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity Activity是一个应用程序组件,提供一个...

    Android客户端的记账小程序.zip

    跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和...

    [iTest]Android开发者性能测试工具

    同志们在Android应用开发或测试过程中,经常需要对应用程序进行性能或压力测试,或者GUI功能测试,以找出程序中隐藏的问题,iTest能精确测试应用程序的每一个功能,为广大开发人员和测试人员提供了一款简单易用的...

    记事本(程序+文档).rar(安卓小程序代码,含报告,运行截图,代码流程,编写思路).zip

    伴随着Android智能手机与平板电脑已经在我们生活大量的使用,越来越多的基于Android开发平台的应用也随之出现。现代化水平的不断提高。人们每天接触的信息量已经变得异常庞大,这就造成传统的纸质记录方式,已经不能...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说是一把双刃剑 4 1.3 Android和Linux ...

    android笔记.rar

    4.1.3 android应用的启动过程... ..127 4.2 服务的原理与使用... ..128 4.3 键盘事件处理... .130 4.4 包管理... .131 4.5 传感器... .132 4.6 浅析dalvik虚拟机JIT技术的实现... ...133 4.7 应用程序的签名...

    Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)

    本文实例讲述了Android开发之在程序中时时获取logcat日志信息的方法。分享给大家供大家参考,具体如下: 今天分享一个在软件开发中很实用的例子,也是这几天在通宵加班中我使用的一个小例子, 在程序中监听Log信息。...

    Android 来去电归属地显示、归属地查询小程序。.zip

    跨平台兼容:开发者一次开发,即可在多种终端设备上运行,免除了复杂的适配工作,大大提高了开发效率。 社交属性强:小程序可以无缝嵌入微信生态,支持分享至聊天窗口、朋友圈等社交场景,有利于用户间的传播和...

    详解Android10的分区存储机制(Scoped Storage)适配教程

    1. 简介 大家应该都有过这样的体会,手机用着用着里面就充斥着各种不懂的文件夹和文件。甚至是连已经删除的软件的文件夹还存在。 为什么会发生的这样的问题... 应用程序请求的数据都要通过权限检测,不符合要求不会被

    Android应用源码字母弹钢琴小游戏.zip

    本项目是一个安卓手机演奏钢琴曲的小应用源码,内置四首歌曲的琴谱,从A到M都能发出不同的钢琴键音,选择一个琴谱按照字母顺序点出来就可以完整演奏出一首曲子,不过程序没有做分辨率适配,显示的位置有点偏,感兴趣...

Global site tag (gtag.js) - Google Analytics