Android对不同设备的支持

2016-06-23 · 🙈Lei · 0条 · 417次

我记得刚开始学android开发的时候,给我们上课的老师说,把文字放到string.xml是一种不好的设计,当时我当真了,因为我觉得为了写几个字还要跑到另外的文件里去起名字,回来再引用,是很麻烦的。但是,后来渐渐发现,其实是很有用的,只不过一般我们可能用不到。像一些产品可能只在国内发布,所以似乎就没有考虑区域化的必要性。可是当应用是给不同语言的人群使用,那么就很有必要了。

还有一些问题,比如说每年谷歌都会开一次开发者大会(I/O),发布新的android版本,但是我们用的手机系统并没有那么快的变化,当android发展到6.0系统的时候,大部分人还在用4.4左右的系统。现在已经到android7版本,大多数人在使用5或者6。所以,开发者就要面对这个问题,如何兼容低版本,尽量少的抛弃用户。

另外,令android开发者比较头痛的一个问题是,开发商太多,自己有自己的一套东西,不同产品屏幕大小、像素密度等不尽相同,为了提高用户的用户体验,设计人员以及开发者要为不同的设备使用不同的图片等,不至于在另外的屏幕上出现变形等问题。

>_ Support Different Languages 支持不同的语言

1.将源码或者XML中的string拿出来放在一个单独的文件中是个好的习惯。

支持不同语言的方法:在res文件夹下新建文件夹,命名方式为"value-ISO language code".

 MyProject/ res/ values/ strings.xml values-es/ 西班牙语 strings.xml values-fr/ 法语 strings.xml

2.如何使用strings.xml

(1)在源码中,可以通过R.string.xxx来使用。

例如:

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

(2)在XML文件中,通过@string/xxx使用。

例如:

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

>_ Support Different Screens支持不同的屏幕

1.Android类设备的屏幕采用两种主要的属性:Size大小和Density像素密度。

四种大小:small, normal, large, xlarge.

四种密度:low(ldpi), medium(mdpi), high(hdpi), extra high(xhdpi).

2.把屏幕的横屏竖屏变化看作是屏幕大小的变化。

3.创建不同的layouts

把不同的layout(布局)放在不同的文件夹中,文件夹的命名格式为layout-<screen_size>.

android设备会自动扩展我们的layout以适应屏幕,因此不需要关注UI元素的绝对大小,我们更应该关注相对于其他view的那些重要view的大小和位置。系统会根据屏幕大小选择合适的布局来运行。

例1:

 MyProject/ res/ layout/ main.xml layout-large/ main.xml

例2:横竖屏(portrait orientation & landscape orientation)

 MyProject/ res/ layout/ main.xml layout-land/ main.xml

例3:为大屏设备横屏时提供特殊布局。

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

4.创建不同的bitmap

为不同像素密度的设备提供不同的图片资源。

xhdpi: 2.0

hdpi: 1.5

mdpi: 1.0 (baseline)

ldpi: 0.75

例子:

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

注:ldpi资源不总是必须的,如果提供了hdpi,系统会将其缩小到一半来适应ldpi屏幕。

>_ Support Different Platform Versions

1.每次android系统版本升级,都会提供一个更棒的API接口,但利用这些API开发的时候,要兼容低版本的设备。

使用Android Support Library来兼容低版本的同时,使用最新特性。

2.在系统运行的时候检测系统版本。

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);
}
}

注:解析XML资源时,系统会忽视那些当前系统版本不支持的属性。

3.使用平台系统的Style和Theme,可以使用android的最新样式。

To make your activity look like a dialog box:

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

To make your activity have a transparent background:

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

To apply your own custom theme defined in /res/values/styles.xml:

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

To apply a theme to your entire app (all activities), add the android:theme attribute to the <application> element:

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


  0