因为我看的是android的官方文档,这里就根据官方文档的内容来写。

Android支持不同的设备包括三个方面:支持不同的语言、支持不同的屏幕大小、支持不懂的版本。

1.支持不同的语言

android系统会获取手机用户在手机“设置”中的语言来和你写的代码进行匹配,来显示对应的语言。

添加对多语言的支持就需要在res文件夹下新建value目录,并且在文件名称末尾加上ISO的语言代码。例如value-zh就代表的中文。

一旦您决定了为哪些语言提供支持,便可创建资源子目录和字符串资源文件。 例如:

res/
       values/
           strings.xml
       values-zh/
           strings.xml

将各个语言区域的字符串值添加到相应文件中。例如:
英文(在android中values文件夹是默认的英文)/values/strings.xml

<resources>
    <string name="name">this my project</string>
</resources>

中文/values-zh/strings.xml 这才是中文应该存在的文件夹

<resources>
    <string name="name">这是我的工程</string>
</resources>

但是中文分为繁体字和简体字,当你查询ISO语言代码时,中文有4个:
zh-tw 中文(中国台湾)
zh-cn 中文(中华人民共和国)
zh-hk 中文(中国香港特别行政区)
zh-sg 中文(新加坡)
这时候把values的文件命名写成values-zh-cn/或者写成values-zh_cn都是不正确的,甚至在运行时会报错,这时候就要在横杠后面加上一个小写的r并且小r后面的字母大写,例如 :values-zh-rCN/这就表示简体中文,values-zh-rHK/这就表示香港的繁体中文,……

2.支持不同的屏幕大小

Android设备的屏幕使用了2个属性:大小和密度。

大小主要是对于layout布局来说的,有四个尺寸:small, normal, large, xlarge

密度主要是对于Bitmap来说的,也有几个密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

他们的用法和drawable和mipmap相似都是在后边加上代表尺寸的单词(上边写的)

对于layout布局来说,应该如下进行命名

res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml

这些匹配系统会自动的进行匹配,你所关心的应该是布局的结构,不要使他发生太多变化。

这四个尺寸已经过时,有兴趣的可以去看一下新的尺寸命名格式。

对于Bitmap来说,控制他的实际是密度,最熟悉的命名就是drawable。

res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

这里讲的这是对文件夹的扩展,并不是详细的讲系统适配,只是简单的涉及到了,以后会详细的讲一下适配。

3、支持不同的版本

在 AndroidManifest.xml文件中,可以对目标版本和最低版本进行控制,如下:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

其中targetSdkVersion指的就是目标版本,就是告诉手机系统在此版本上你已经进行了完全测试,不用进行兼容性的活动,提高运行的效率,当手机版本大于这个值时,开启兼容性活动。

在代码中,根据系统提供的Build类来判断当前的系统版本,在代码中做进一步的处理。代码如下:

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

同时android还提供了样式和主题,而且这些主题是内置的,使应用程序具有底层操作系统的外观和感觉。例如
让你的activity看起来像一个dialog:

<activity android:theme="@android:style/Theme.Dialog">

让你的activity有一个透明的背景:

<activity android:theme="@android:style/Theme.Translucent">

允许你在 /res/values/styles.xml:中自定义theme:

<activity android:theme="@style/CustomTheme">

要将主题应用到整个应用程序(所有活动):

<application android:theme="@style/CustomTheme">