Android 支持不同(本地化、屏幕、版本)设备
Android 支持不同(本地化、屏幕、版本) 设备
不同的制造商、屏幕分辨率、操作系统版本等的多样性导致不同Android设备之间存在一定的差异性。如果希望一个App可以尽可能多的支持不同Android设备,那么开发者必须对这种设备间的差异性做出相应的处理。
截至到目前为止的Android版本(http://developer.android.com/guide/topics/manifest/uses-sdk-element.html)
1、支持本地化
随着全球化的发展,地域界限越来越模糊,一个App不仅仅局限在一个小的地域内被使用。这就要求App可以支持多种语言,并尊重相应地域的文化和习俗等。Android已经为我们考虑到这一点,我们需要做的仅仅是根据它的规范,做相应的简单处理即可。
本地化不仅仅只是语言,还包括图片,布局,声音,动画等。本文仅以字符串为例,其它内容可参考Android开发者网站(http://developer.android.com/guide/topics/resources/localization.html)。
1.1创建本地字符串文件:
如果你希望自己的App支持汉语和法语,并且假定汉语为默认语言,我们需要做些什么呢?
在处理这个问题前,我们先了解一下现在的情况时什么?
在res/values文件夹下有个
strings.xml文件,里面可以保存默认语言的字符串,在本例中,里面的字符串都是汉语字符串。
接下来我们需要做的就是在res文件夹下创建
values-fr的文件夹,然后再该文件夹下创建
用于保存法语字符串的strings.xml文件。
1.2使用本地字符串:
1.2.1在XML文件中通过
@string/<string_name>形式使用:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />
1.2.2在代码中使用:
1.2.2.1通过getResource()方法使用:
String hello = getResource().getString(R.string.hello_world);
1.2.2.2通过R.string.string_name引用:
TextView tv = new TextView(this); tv.setText(R.string.hello_world);
对于 图片,布局,声音,动画等资源的本地化操作方式类似,在此不再赘述。
2、支持多屏幕
Android允许开发者根据设备的不同分辨率设定布局文件和图片文件来支持对于多屏幕的支持。
本文仅以布局文件的设定为例:
在res/layout文件夹下有一个my_activity.xml文件,用于某个Activity的布局设计,现在希望可以支持较大屏幕设备,我们该如何处理呢?
很简单,在res文件夹下创建layout-large文件夹,然后在该文件夹下创建
my_activity.xml文件,用于对较大屏幕设备的布局设计即可。
使用时通过R.layout.my_activity.xml引用即可,示例如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
如果你愿意,你还可以根据方向做布局上的设定:
更多多屏幕的操作,参考Android开发者网站(http://developer.android.com/training/multiscreen/index.html)。
3、支持多版本
最新版本的Android系统,为App的开发提供了尽可能多的API和新的功能,然而我们同样要保持对低版本的支持,直到那些低版本已经升级到高版本。这要求开发者根据不同的版本,有区别的对代码做相关处理。也许你会说,如果可以获得系统版本就好了,那样我就可以根据不同的版本做不同的代码处理了。是的,Android提供了访问系统版本的接口,下面让我们看看如何获得系统版本吧。通过Build.VERSION.SDK_INT就可以获得当前版本的API Level的整型表示。
示例:比如想根据不同的版本使用不同的UI元素,此时就需要根据不同的版本做不同的UI处理。这种情况还有很多,相信大家在遇到时都可以灵活的运用。:)
4、多说一句: 上述仅仅是对于 支持不同(本地化、屏幕、版本)Android设备的一些比较常规的做法,当然我们可以有可以达到预期效果,而又有别于常规的做法,这就需要我们灵活的运用了哦。