`

Android自适应不同分辨率或不同屏幕大小

 
阅读更多

Android自适应不同分辨率或不同屏幕大小的layout布局(横屏|竖屏)
2011-08-09 0:36

一:不同的layout

Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢?
   其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

二:hdpi、mdpi、ldpi

在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。

  drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

  (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

更正:应该是对应不同density 的图片   

  在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

[i]备注:三者的解析度不一样,就像你把电脑的分辨率调低,图片会变大一样,反之分辨率高,图片缩小。 [/i]
屏幕方向:

横屏竖屏自动切换:

     可以在res目录下建立layout-port-800x600和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。



不同分辨率横屏竖屏自动切换:

以800x600为例
可以在res目录下建立layout-port-800x600和layout-land-800x600两个目录

不切换:


以下步骤是网上流传的,不过我自己之前是通过图形化界面实现这个配置,算是殊途同归,有空我会把图片贴上来。

还要说明一点:每个activity都有这个属性screenOrientation,每个activity都需要设置,可以设置为竖屏(portrait),也可以设置为无重力感应(nosensor)。

要让程序界面保持一个方向,不随手机方向转动而变化的处理办法:
 
在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。
例如(landscape是横向,portrait是纵向):

Java代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ray.linkit"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
                <activity android:name=".GamePlay"
                android:screenOrientation="portrait"></activity>
                <activity android:name=".OptionView"
                android:screenOrientation="portrait"></activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!

有的程序适合从竖屏切换到横屏,或者反过来,这个时候怎么办呢?可以在配置Activity的地方进行如下的配置android:screenOrientation="portrait"。这样就可以保证是竖屏总是竖屏了,或者landscape横向。

而有的程序是适合横竖屏切换的。如何处理呢?首先要在配置Activity的时候进行如下的配置:android:configChanges="keyboardHidden|orientation",另外需要重写Activity的 onConfigurationChanged方法。实现方式如下,不需要做太多的内容:

@Override
        public void onConfigurationChanged(Configuration newConfig) {
                super.onConfigurationChanged(newConfig);
                if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                        // land do nothing is ok
                } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                        // port do nothing is ok
                }
        }




写一个支持多分辨的程序,基于1.6开发的,建立了三个资源文件夹drawable-hdpi drawable-mdpi drawable-ldpi,里面分别存放72*72 48*48 36*36的icon图标文件。当我在G1(1.5的系统)上测试时,图标应该自适应为48*48才对啊,但实际显示的是36*36。怎么才能让其自适应 48*48的icon图标呢

解决办法 drawable-hdpi drawable-mdpi drawable-ldpi改成drawable-480X320 drawable-800X480的多分辨支持的文件夹

 

对于Android游戏开发我们不得不像iPhone那样思考兼容 Android平板电脑,对于苹果要考虑iPad、iPhone 3GS和iPhone 4等屏幕之间的兼容性,对于几乎所有的分辨率总结了大约超过20中粉笔阿女郎的大小和对应关系,对于开发Android游戏而言可以考虑到未来的3.0以及很多平板电脑的需要。

常规的我们可能只考虑QVGA,HVGA,WVGA,FWVGA和DVGA,但是抛去了手机不谈,可能平板使用类似WSVGA的1024×576以及WXGA的1280×768等等。
QVGA = 320 * 240;
WQVGA = 320 * 480;
WQVGA2 = 400 * 240;
WQVGA3 = 432 * 240;
HVGA = 480 * 320;
VGA = 640 * 480;
WVGA = 800 * 480;
WVGA2 = 768 * 480;
FWVGA = 854 * 480;
DVGA = 960 * 640;
PAL = 576 * 520;
NTSC = 486 * 440;
SVGA = 800 * 600;
WSVGA [...]

 
这是一个比较有代表性的Android软件资源包,drawable里面存放的是应用的图标文件,layout存放的是布局,简单说就是这些图标如何摆放。为什么Android上需要这么多资源包文件和布局文件是我们接下来需要讨论的问题。

 

Android设备屏幕的尺寸是各式各样的,如小米是4英寸的,Xoom平板是10英寸;分辨率也千奇百怪,800×480,960×540等;Android版本的碎片化问题更是萦绕于心,不过在设计应用时可以分为两大块:3.0之前的版本和3.0之后的版本。这种情况会带来什么问题我们用三个假设来说明一下。

 

1. 假设你的手上有两个4英寸的设备,设备A的分辨率是800×480,设备B的分辨率是1600×960。你在设备A上设计了一个64×64像素的图标,感觉它大小正合适,但放到设备B上的时候,这个图标看上去就只有之前一半大小了。

2. 假设你手上的两个设备,设备A是4英寸,设备B是10英寸。在设备A上方放了一个tab控件,有三个页签。放到设备B上看时tab控件的三个页签被拉得很长,本来放6个页签的空间只放了三个页签。

3. 假设你手上的两个设备,设备A装的是Android2.3,设备B装的是Android4.0,而设备B没有menu建,风格也不一样。你发现两个设备上用同一套风格的皮肤并不合适。

 

Google提供了一套体系去解决这些问题。我们再回到上面的那张图,drawable文件夹有ldpi、mdpi、hdpi、xhdpi四种。dpi指像素/英寸,而ldpi指120,mdpi指160,hdpi指240,xhdpi指320。小米手机是4英寸、854×480的分辨率,那么小米手机的dpi就是854的平方加480的平方和开2次方后除以4,结果大约是245。如果应用安装在小米手机上,那么系统会调用图中drawable-hdpi里面的资源。这样,你只要做4套资源分别放在drawable-ldpi、drawable-mdpi、drawable-hdpi以及drawable-xdpi下(图标可以按照3:4:6:8的比例制作图片资源),那么就可以解决上面假设1当中提到的问题。

 

对于相同dpi、但尺寸不一样的设备,可以通过layout文件控制各种资源的布局。Google将设备分为small(2~3英寸)、normal(4英寸左右)、large(5~7英寸)、xlarge(7英寸以上)。在上面的假设2种,我们可以在layout-normal里配置3个页签的tab栏,在layout-xlarge里配置6个页签的tab栏。如果应用在所有设备上布局都一样,那么就不用考虑针对不同尺寸的layout。从图中那些layout*文件夹可以看出,该应用在hdpi及xhdpi上支持横竖屏,而且横竖屏的布局不一致,但没有考虑不同尺寸的设备使用不同布局的情况。

 

Android3.0之前的风格与Android3.0(包含3.0)之后的风格区别很大,图中那个应用就使用了两种风格的资源及布局。Android2.3的小米会使用drawable-hdpi及layout-hdpi当中的文件,而Android4.0的小米就会使用drawable-hdpi-v11及layout-hdpi-v11里面的文件。

 
今天就到此为止了,有空的时候再说说9-Patch的使用。这篇文章也就只能起到抛砖引玉的作用,在实际设计应用的时候还需要多去参考其他文档资料,特别是Android开发的官方文档。

分享到:
评论

相关推荐

    Android自适应屏幕分辨率

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

    Android自适应不同分辨率总结

    ### Android自适应不同分辨率的关键知识点 在Android应用开发中,实现界面自适应不同分辨率设备的能力是至关重要的。本文将从给定的文件信息出发,深入探讨Android如何处理不同分辨率下的界面适配问题,包括理解...

    自适应屏幕分辨率,labview自适应屏幕分辨率,LabView

    每个VI都有自己的尺寸和布局,这直接影响到其在不同分辨率屏幕上的显示效果。为了实现自适应,我们需要关注以下几个方面: 1. **布局管理器**:LabView提供了几种布局管理器,如网格布局、绝对布局和相对布局。网格...

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

    为了进一步增强应用的自适应能力,建议采用响应式设计的原则,利用相对布局、线性布局或约束布局(ConstraintLayout)等灵活的布局控件,以及使用`wrap_content`和`match_parent`这样的属性来控制视图的大小和位置,...

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

    Android字体大小自适应不同分辨率的解决办法是指在不同的Android设备上,根据屏幕分辨率和尺寸变化,自动调整字体大小的技术。这个解决办法是通过使用Android的资源文件夹机制和dimens.xml文件来实现的。 在 ...

    android自适应屏幕布局

    Android自适应屏幕布局是指在Android系统中实现屏幕自适应的布局方式,通过使用不同的布局文件和样式可以使屏幕布局适应不同的屏幕尺寸和方向。下面是关于Android自适应屏幕布局的详细知识点: 一、布局文件 在...

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

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

    cocos2d-x自适应屏幕分辨率 源码

    为了实现自适应屏幕分辨率,开发者通常会在`AppDelegate.cpp`或`App.cpp`的`applicationDidFinishLaunching`方法中设置显示模式。例如,以下代码片段展示了如何设置`SHOW_ALL`模式: ```cpp auto director = ...

    android 自适应屏幕大小

    在Android开发中,面对各种不同尺寸和分辨率的设备,如何实现屏幕自适应是一个重要的课题。本文将详细解析Android系统如何处理屏幕自适应问题,并提供相应的解决策略。 首先,Android界面开发推荐使用“density-...

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

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

    Android自适应屏幕大小和layout布局(横屏竖屏)

    ### Android自适应屏幕大小与Layout布局详解 #### 一、不同屏幕尺寸的适应性设计 在Android应用开发中,为了确保应用能够在各种不同尺寸的屏幕上正常显示,开发者需要考虑多种屏幕分辨率的情况。例如,常见的屏幕...

    Android 自适应分辨率

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

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

    总的来说,应用XML文件开发Android自适应分辨率程序的关键在于理解XML布局文件的结构和功能,以及如何利用Android的资源管理系统来适配不同设备的屏幕尺寸和分辨率。通过灵活地运用这些技术,开发者可以创建出能够在...

    Android软件自适应屏幕技巧

    - **分辨率单位**:Android中有几种不同的单位来表示屏幕尺寸和分辨率,主要包括`px`(像素)、`dip`或`dp`(设备独立像素)、`sp`(放大像素)。其中`px`是最基本的单位,它直接对应屏幕上的物理像素点;`dip`或`dp...

    android自动适应屏幕源码.zip

    在Android开发中,让应用程序能够自动适应不同尺寸和分辨率的屏幕是一项重要的任务。"android自动适应屏幕源码.zip"这个压缩包很可能包含了实现这一功能的示例代码和资源。让我们深入探讨一下Android如何进行屏幕...

    rem布局实现不同分辨率移动终端的自适应、整体缩放

    REM布局是一种在Web开发中广泛使用的响应式设计技术,它能够帮助开发者实现页面在不同分辨率的移动设备上自适应显示,确保用户界面在各种屏幕尺寸下都能保持良好的可读性和视觉一致性。REM(Root Em)是以根元素...

    android自适应屏幕demo

    6. **响应式设计**:借鉴网页开发中的概念,使用如FlexboxLayout或GridLayout实现响应式设计,使UI元素可以根据屏幕大小自动调整布局。 7. **SwiperFragment/ViewPager**:在大屏幕上,可以利用额外的空间显示更多...

    22.android 自适应屏幕

    在Android开发中,面对各种不同尺寸和分辨率的设备,如何实现应用的自适应屏幕是非常关键的一个环节。"22.android 自适应屏幕"这个项目提供了一个小的Demo,旨在帮助开发者解决Android应用在不同设备上的适配问题。...

    android屏幕自适应

    - 对于大小不同的屏幕,可以设置`android:largeScreens="true"`或`android:smallScreens="true"`来指定应用支持的大或小屏幕。 - 例如,如果设置了`android:largeScreens="true"`,则应用在大屏幕设备上将使用与...

Global site tag (gtag.js) - Google Analytics