我们知道,现在的Android设备有许多的形状和尺寸。而我们的APP用户可能再使用各种各样的Android设备,为了让我们的APP能在这些设备上成功且正常运行,我们的APP就需要去适配不同的设备配置。我们一般从下面三个方面去考虑适配:语言屏幕大小以及Android的系统版本

1.适配不同语言

我们的用户大部分都是国人,但是也有可能是美国人,法国人啥的..这个时候我们的APP如果只支持中文的话,自然就不行了。当然的,我们肯定也不能每种语言都做一个APP,那样的话估计没人来搞Android开发了。Android提供了一种机制,我们可以在APP项目开发时提供几种不同语言的资源,在不同的语言版本下就能显示不同的语言文字,这样我们的APP就能同时满足不同国家的人的需求了。我们看看具体的做法:

在Android开发中,将UI字符串从我们的APP代码中分离出来,将它们放在一个外部文件中,是一个很好的做法,也是我们应该去做的。Android的资源文件夹res/的作用也是为此。

为了支持不同的语言,我们需要在res/资源目录下创建一些values文件夹,这个文件夹的命名规则为"values"+连字符"-"+ISO国家代码,比如values-fr/代表其下的资源都是为国家语言代码为"fr"的国家即法国准备的,Android系统会根据设备的区域动态加载相应的资源。假如我们希望支持西班牙语(国家代码ES)和法语(国家代码FR),我们需要建立如下的字符串资源目录:

MyProject/        res/       values/               strings.xml       values-es/               strings.xml       values-fr/               strings.xml
然后我们就可以在对应的区域语言资源文件中加入对应的语言文本。比如,现在我们创建一个新的项目:SupportProject,然后在它的app/res下建立2个新的语言资源文件夹,分别为 values-es/values-fr/,如下:

然后在这两个文件夹下,分别创建一个strings.xml字符串资源文件,添加一个简单的名为txt_hello_world的字符串资源,同样的在默认的values/strings.xml中也加入这个字符串(PS:Android的默认区域语言为English)。下面是3个文件夹下的txt_hello_world的定义:

①values/strings.xml

    SupportProject    Settings    Hello World!
②values-es/strings.xml
    SupportProject    Settings    Hola Mundo!
③values-fr/strings.xml
    SupportProject    Settings    Bonjour le monde !
然后我们在MainActivity的布局资源中引用该字符串资源:

<?xml version="1.0" encoding="utf-8"?>    
然后我们首先看看默认区域的APP效果:

然后切换我们的系统语言,这个可以在我们手机中的设置中找到,然后我们设置成法语:

再次运行APP:


再次选择系统语言为西班牙语Espanol,然后运行APP:

现在我们的APP就能支持多语言了!


2.适配不同屏幕

Android设备屏幕的分类一般是根据屏幕大小屏幕密度两个属性来区分。为了能让我们的APP能在多种屏幕尺寸和屏幕密度的Android设备上正常运行,我们应该像上面的语言资源一样,准备多套不同的布局资源和图片资源等。

Android有4种大小尺寸定义: small,normal,large,xlarge。

同样也有5种不同的密度定义:ldpi,mdpi,hdpi,xhdpi,xxhdpi。

有时候可能还有横竖屏适配,这里就不去详细说明了,暂时只关注最基本的。


创建不同的Layout

为了保证在不同的屏幕尺寸下,App都能给用户良好的体验,我们可能需要为市场上常见的屏幕尺寸创建相应的layout布局资源文件。和语言资源一样,屏幕尺寸下的布局资源同样也有自己的文件夹命名规范: "layout"+连字符"-"+屏幕尺寸"",比如我们为large屏幕尺寸建立一个layout资源文件夹,那么它的文件名应该为layout-large 。(简单介绍一下,横屏的layout资源目录命名规范:"layout"+[连字符"-"+屏幕尺寸""]+连字符"-"+横屏"land",[]中表示可有可无,竖屏类似)。

我们写一个简单的例子,我们的布局中,有一个文本框和一个按钮