`
rayln
  • 浏览: 429769 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android多分辨率自适应

 
阅读更多
转载: http://blog.csdn.net/soesa/article/details/8047203

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

首先:你需要在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厂商修改的完全一致。
2. 第二种解决方案:
2、布局的适配:
在第1点中我们已经解决了资源图片的适配问题,但是图片的大小不同势必会造成布局的差异,如果使用一个统一的布局文件,可能会造成资源图片无法完整显示在屏幕内,所以对于这种问题,解决方法是建立不同的layout文件夹,对于不同屏幕的分辨率,书写其专用的.xml文件。
多个layout文件夹在命名上有相应规则,以分辨率480x854为例,需要建立480x854像素的layout文件夹,命名:layout-854x480,有两点需要注意:①大数(854)必须在前,否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号。系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的布局文件。


设置尺寸文件夹
例如:values-sw600dp

设置dimen
在每个value文件夹中新建dimen.xml
然后写入
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="btnTextSize">20sp</dimen> 
    <dimen name="address">16sp</dimen> 
</resources>


在layout.xml中使用
<EditText android:textSize="@dimen/btnTextSize" android:layout_marginLeft="15dp"
				        android:layout_width="0dp"
				        android:layout_height="wrap_content"
				        android:layout_gravity="center_vertical"
				        android:layout_weight="1"
				        android:hint="Zip code" />
分享到:
评论

相关推荐

    BaseProject是一个用于Android开发的Android基本程序架构库(Android屏幕自适应分辨率自适应

    BaseProject是一个用于Android开发的Android基本程序架构库(Android屏幕自适应分辨率自适应、Android分辨率自适应、安卓版本分辨率自适应、网络通信、通用方法等).zip

    android多分辨率屏幕自适应解决方案

    多分辨率屏幕自适应解决方案是指利用Android提供的工具和属性,如layout_weight,来优化界面元素在不同屏幕尺寸中的展示。 首先,layout_weight属性是一个非常关键的概念,在开发过程中常用来分配线性布局...

    Android自适应屏幕分辨率

    "Android自适应屏幕分辨率" Android 操作系统中,屏幕分辨率的差异非常大,需要程序自动适应屏幕大小。正确的做法是使用 weight 属性,设置控件的 layout 中的 width、height 为 fill-parent,而不是 wrap-content...

    android应用自适应多分辨率的解决方法

    本文将深入探讨如何实现Android应用的自适应多分辨率设计,涵盖布局、资源管理和配置文件的优化策略。 ### 一、布局资源目录的合理规划 Android系统支持开发者为不同屏幕尺寸和密度创建特定的布局资源文件。这是...

    Android字体大小自适应不同分辨率的解决办法

    Android字体大小自适应不同分辨率的解决办法 今天有人问我,Android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的。 一、原理如下: 假设需要适应320×240,480...

    android屏幕自适应

    在Android开发过程中,为了确保应用能够在不同尺寸、分辨率的设备上正常显示,开发者需要实现屏幕自适应。本文将详细介绍如何在Android应用中实现屏幕自适应,包括布局、资源图片的选择以及如何配置AndroidManifest....

    Android多分辨率适配方案

    Android 多分辨率适配方案 Android 设计之初就考虑到了 UI 在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确。UI 适配主要受平台两个因素的影响:屏幕尺寸(屏幕的像素宽度及像素...

    Android多分辨率解决方案

    在Android开发中,面对众多不同分辨率的设备,开发者必须采取有效的多分辨率解决方案,以确保应用程序在各种设备上都能提供良好的用户体验。以下将详细介绍Android多分辨率适应的策略。 1. **资源目录结构** ...

    玩转Android多分辨率规格的界面设计

    玩转Android多分辨率规格的界面设计 随着移动互联网的飞速发展,Android系统因其开放性和灵活性,成为全球最受欢迎的移动操作系统之一。然而,这也带来了挑战,尤其是对于界面设计师而言,如何应对Android设备屏幕...

    Android自适应不同分辨率总结

    3. **资源的多屏支持**:为了进一步增强自适应性,可以利用Android的资源目录结构,如使用不同的drawable目录(如hdpi、xhdpi、xxhdpi)存储不同分辨率的图像资源,以及使用values目录下的不同qualifiers(如-sw600...

    Delphi XE10 Android Splash设备自适应和沉浸式状态条

    在Delphi XE10中,使用XXX.9.png文件可以确保Splash Screen在不同分辨率和尺寸的Android设备上正确显示。 接下来,我们需要关注的是Style.xml文件。这个XML文件是Android应用的样式和主题配置文件,它允许我们定制...

    应用XML文件开发Android自适应分辨率程序.pdf

    在Android应用开发中,XML文件扮演着至关重要的角色,特别是在创建自适应分辨率的程序时。XML,即可扩展标记语言,被广泛应用于Android系统中,作为布局文件来构建应用程序的用户界面。它允许开发者将界面设计与逻辑...

    Android生成适配各种分辨率的dimen源文件

    自己写了一个Java文件用于生成适配各种Android屏幕分辨率的dimen尺寸,以px为单位,在res文件夹下创建“values-分辨率,如:values-1280x720”的文件再将生成的文件放进去,原理很简单,易懂

    Android 自适应分辨率

    总之,Android自适应分辨率涉及到屏幕尺寸、像素密度、资源适配、布局管理等多个方面。开发者需要理解这些概念,并结合Android提供的工具和机制,才能创建出能在各种设备上良好运行的应用。通过不断实践和优化,你的...

    android屏幕自适应案例详解

    在Android开发中,屏幕自适应是一项至关重要的技术,它确保应用程序在不同尺寸和分辨率的设备上都能呈现良好的用户体验。本文将深入探讨Android屏幕自适应的原理、方法和案例,帮助开发者掌握这一关键技能。 首先,...

    android自定义dialog嵌套listview自适应屏幕

    综上所述,实现“android自定义dialog嵌套listview自适应屏幕”涉及了Android的多个核心组件和概念,包括Dialog的自定义、ListView的适配、屏幕自适应策略以及UI测试。理解并掌握这些知识点,对于提升Android应用的...

    Android多分辨率多密度下UI适配方案.

    Android 多分辨率多密度下 UI 适配方案 Android 设计之初就考虑到了 UI 在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确。UI 适配主要受平台两个因素的影响:屏幕尺寸(屏幕的...

    android安卓开发app如何做到自适应手机屏幕大小,适应不同分辨率的手机.zip

    在Android应用开发中,确保应用程序能够自适应各种手机屏幕大小和分辨率是至关重要的。这不仅可以提供优秀的用户体验,也是Google Play商店对应用质量的基本要求。以下是一些关键知识点,帮助开发者实现这一目标: ...

Global site tag (gtag.js) - Google Analytics