Android guide学习系列(-)——Device Compatibility(设备兼容性)

来源:互联网 发布:网络教学平台官网 编辑:程序博客网 时间:2024/05/17 09:01

        android被设计出来就可运行在手机,平板,电视上。作为一名开发者,不同的设备,不同的厂商,也导致了用户的不同,为了满足不同用户不同设备的需求,那么我们所开发的引用的兼容性变得尤为重要。

        为了使我们的引用能够满足不同用户的不同设备的需求,可以从三个方面去考虑:

        1.支持不同的语言(主要是为了世界和平)

        2.支持不同的屏幕尺寸,大小,分辨率

        3.支持不同的系统版本(有的API在高版本可以使用,低版本不可以使用,或者已经过时,此时就得考虑到兼容性)。

下面就从这三个方面一一细说吧。

支持不同的语言

      首先,其实如果你所开发的app只在天朝使用的话,可以不必考虑这方面的问题,因为天朝人都看得懂中文,你只需要用中文就ok了,但是如果你的APP是要冲出中国,冲出亚洲,走向世界的话,那你就要支持不同的语言了,否则到时候小日本的用户看到天朝的文字,以他们的智商,怎么能读懂呢,对吧。

      为了使我们的APP能够,支持不同的语言,我们需要在我们的应用程序中增加额外的value文件夹。看下面

                                                                              

根据不同的地域,编写不同的values文件夹。例如下面的

English (default locale), /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>
Spanish, /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>
French, /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>
编写不同国家 不同的语言之后,我们就可以再应用程序之中使用了。
// Get a string resource from your app's ResourcesString hello = getResources().getString(R.string.hello_world);// Or supply a string resource to a method that requires a stringTextView textView = new TextView(this);textView.setText(R.string.hello_world);
系统会自动根据地域(Locale)不同去识别不同的values文件夹下面的String.xml文件。这样假如你的APP在美国人手里使用,他就会变成英语了。

支持不同屏幕(大小和密度)

      Android设备的分类不同主要由于两个属性:设备大小和密度。我们应该祈祷我们我们的引用能够在不同大小的屏幕或者密度上使用。Android主要将我们的屏幕分为四种small,normal,large,xlarge。不同的密度分为四种 low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。我们应该申明不同的layout布局文件和不同的bitmap,并放在不同的文件夹中,来适应不同的设备大小和密度。就像我们上面所说适应不同的语言一样。有的时候屏幕的方向也是我们APP考虑的问题,有时候也需要为不同的屏幕方向单独写一套布局文件或者准备一套图片。和上面的支持不同的语言类似,将布局文件放在不同的layout文件夹下面

                     

    对于支持不同屏幕,必须搞清楚一下几个概念 

                                        

屏幕尺寸:屏幕的对角线的长度,单位英寸 1英寸约等于2.54cm

屏幕分辨率:横纵方向上的像素点数,单位是px1px=1个像素点,一般以纵向的像素*横向像素,例如1920*1080

屏幕像素密度:每英寸的像素点数,单位dpi(dot per inch),屏幕像素密度于屏幕尺寸和屏幕分辨率有关,一般指对角线上的每英寸的像素点数例如Nexus5 ,屏幕4.95英寸,分辨率为1920*1080,他的dpi=445 ,他的计算方式是1920*1920+1080*1080之后开方再除以4.95约等于445。

PX:构成图像的最小单位

dp,dip:Density Independent Pixels的缩写,即密度无关像素,以160dpi(屏幕像素密度)为基准,1dp=1px

SpScale-Independent Pixels,可以根据文字大小首选项进行缩放,字体的单位

不同的像素密度进行区分

                                                                                                

支持各种屏幕尺寸

1,使用wrap_content,match_parent,weight.在布局文件中尽量不适用具体的数字,可以再dimen文件中引用。

2,使用相对布局,禁用绝对布局

3,使用限定符

4,使用自动拉伸位图(.9图片)

5,可以使用Fragment来支持手机和平板。(其实就是准备不同的布局文件了)

给我们开发的APP,准备多套bitmap文件。以适应不同的屏幕密度。

                                                  


  在设计图标时,对于五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。


支持不同的系统版本

        由于移动互联网发展的速度非常快,移动设备的更新换代速度也非常快,这些移动设备也越来越能干满足人们日常的生活需要了。这样正造就了我们移动开发人员的困扰,由于有些人可能用的是最新的手机,有的人可能用的还是低版本的手机,但是这些低版本的手机用户我们又不能忽略,因此,我们开发的app,必须在我们大部分的用户的手机上能够正常使用和适配。

       首先,明确我们的应用的api版本。指定最低版本和目标版本。这样可以适应大部分用户版本,但是也有一些特殊情况。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />    ...</manifest>
     其次,可以再运行的时候,检测当前系统的运行版本,或者运用第三方的开源库,适用不同版本的api。例如在使用ActionBar的时候,可以再运行时候检测系统版本
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);    }}
还有,在使用属性动画的时候,在高版本的某些api在低版本可能有些不适用,这个时候就出现了开源的nineoldandroids。使得在所有的api上可以通用属性动画的的一些方法。




1 0
原创粉丝点击