Android 多分辨率与不同语言适配

时间:2021-07-25 00:33:28

一、适配不同国家语言

智能手机系统设置里各国语言的选项,然后我们项目里可以通过资源目录实现适配语言。我们知道工程的根目录有个res/的目录,res/下有一个资源类型的目录,其中有个values/strings.xml默认文件,

在res/目录下创建多个values/strings.xml文件,但是values目录需要改名,例如:

res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml

其中,英语,/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">My Application</string>
<string name="hello_world">Hello World!</string>
</resources>

西班牙语,/values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
</resources>

法语,/values-fr/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mon Application</string>
<string name="hello_world">Bonjour le monde !</string>
</resources>

然后,我们就可以在代码中使用R.string.<string_name>语法来引用字符串资源就行了。

不同屏幕适配要点

1,使用wrap_content、match_parent、weight 
2,使用相对布局,禁用绝对布局 
3,使用自动拉伸位图 .9格式(nine-patch图片) 
4,使用dp来设置控件间距,使用sp来设置文字大小 
5,提供备用的位图, xhdpi,hdpi,ldp 
6,使用Size限定符,在普通layout文件夹中写一个布局文件,在到layout-large文件夹中写另一个布局文件,然后根据屏幕大小不同来加载不同的布局文件。 
7,使用Smallest-width限定符,比如:layout-sw600dp 就会在屏幕是600dp以上就会加载这个布局文件。

前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机。因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法。

先介绍一下所走的弯路,由于android的布局文件存放在res的layout中,可以根据不同的手机分辨率指定特定的layou参数,如图所示:

Android  多分辨率与不同语言适配

根据不同的手机设定多个分辨率layout参数布局文件。因此再程序加载的过程中,会把运行该分辨率下的布局文件。 这样开发的问题是回到至布局文件很多,很乱。不方便管理。一旦修改需要修改很多布局文件。

通过分析反编译参看国内主流应用(QQ,京东,微信等)的布局文件进行学习,发现布局文件基本是一套的,把布局文件中需要设定的数值文件values设置成多套。合理的布局应该是这样

Android  多分辨率与不同语言适配

可以看出布局layout是一套的,但是需要资源的时候drawable可以是多套的,根据分辨率的不同做特别的适配。而对应的values一定是多套的。而且values的适配已经从低分辨率800x432一直到高分辨率1280x752都有对应的数据。而且会根据密度进行单独的适配hdpi,xhdip。这样对于代码是比较容易维护的。

因此根据所获取的信息,本人把项目进行了重构,下面是重构后的布局文件,

Android  多分辨率与不同语言适配

短小精干,由于用到的图片资源不多,因此就用一套drawable,用一套布局layout,把对应的value使用多套。在不同手机上运行过。基本上都能够满足用户体验。把数据完整的显示出来,效果也不失真。

dimen.xml在values文件夹下面

<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="btn_width">16dp</dimen>
<dimen name="btn_height">16dp</dimen>
</resources>

布局中的使用:

<Button
android:text="@string/test_dimen1"
android:id="@+id/Button01"
android:layout_width="@dimen/btn_width"
android:layout_height="@dimen/btn_height"/>

文件夹含义:

values-v11   -------API 11+代表android 3.0 +,意思是在API11设备上,该目录下的dimens.xml代替res/values/dimens.xml

values-480x320、values-800x480等 ------------意思是在不同分辨率下,该目录下的dimens.xml代替res/values/dimens.xml

API对应版本号

Android  多分辨率与不同语言适配

拿京东的看看,定义了不少啊

Android  多分辨率与不同语言适配