Android起航系列第三章:android app的兼容性
2016-01-13 21:48
405 查看
Android手机APP起航系列
本博客文章基于android官方sdk的docs文档,目的是通过此教程巩固android手机app开发的一些应知应会的基础知识,也希望能帮助同在学习android开发的小伙伴们,共同进步,如有写的不到之处,还请各位小伙伴们不吝赐教。主要内容
1、兼容不同的屏幕2、兼容不同的语言
3、兼容不同的android版本
一、兼容不同的设备
与苹果设备不同,全世界有大量不同形状、不同大小、不同分辨率的android设备,android设备的屏幕碎片化非常严重,这给我们开发android的应用程序带来了一定的麻烦,你很难让你的设备完美地运行在所有的android设备上。下面几张图会让你明白,不多讲(有密集恐惧症的自动跳过):通常,在android中把屏幕大小分为四种类别:small, normal, large, xlarge;把分辨率也分为四种:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi),android系统通过对运行设备的辨别,自动加载对应的资源。开发过程中,您必须把大小不同的资源放到不同的资源目录下面。需要注意的是,android中屏幕的横放(landscape)与竖放(portrait)被视作不同的屏幕大小,所以我们的app在切换屏幕的方向时activity需要重新计算与绘制。
布局文件
通常我们用-large-land的方式修饰布局文件的存放目录,如下图:1、项目视图如下
2、android视图如下
存放在不同的目录,资源文件名相同,比如我们可以用下面的方式来修饰布局文件
MyProject/
res/
layout/ # default (portrait)
main.xml
layout-land/ # landscape
main.xml
layout-large/ # large (portrait)
main.xml
layout-large-land/ # large landscape
main.xml
图片文件
一般情况下,对于同一图片资源,我们需要提供四种不同像素大小的图像,分别为低像素low,中像素medium,高像素high,以及超高像素extra-high,这样可以让我们的应用达到比较好的视觉质量。不同像素图片尺寸比例如下:xxxhdpi: 4.0 xxhdpi: 3.0 xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (baseline) ldpi: 0.75
ldpi并不是必须的,如果项目中没有ldpi的图像,系统会自动将hdpi的图像压缩一半作为ldpi的资源,如下图:
二、兼容不同的语言
在app的国际化时,我们需要不同的目录下(同样也是使用修饰词)创建locate文件,譬如我们常用的strings.xml文件,当app在中国大陆使用时,我们需要中文简体的配置文件,在台湾使用时,需要中文繁体的配置文件,在岛国使用时,需要用到岛国鸟语的配置文件等等。具体效果如下:android studio中,我们可以打开translations editor编辑器直接编辑变量在不同语言环境下的值,很方便,如图:
三、兼容不同的版本
用户手机多种多用,手机中android系统也存在很多版本,所以,如果我们想让我们的应用运行在大部分android设备上,我们需要做一些额外的工作。一般情况下我们使用android support library 支持包来让我们的app能支持较早版本的android设备。1、定义最低api和目标api
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> ... </manifest>
2、运行时检查系统版本
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); } }
3、使用系统的样式与主题
<activity android:theme="@android:style/Theme.Dialog"> <activity android:theme="@android:style/Theme.Translucent"> <activity android:theme="@style/CustomTheme"> <application android:theme="@style/CustomTheme">
相关文章推荐
- 【原创】第一个iOS应用程序
- 【原创】iOS开发入门教程
- [iOS]抓包工具Charles简单使用
- android 初始开发小问题
- iOS实例变量属性参数的区别
- Object-C--->Swift之(一)可选类型
- iOS---如何获取手机的本地照片和相册
- android利用xmpp进行即时通信
- 014: class and objects > 多态
- Android中怎么用this
- 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突
- NGUI研究之在Unity中使用贝塞尔曲线
- webView的用法
- Android应用开发中模拟按HOME键效果
- 一些Android大牛的博客链接收集
- iOS Size class
- cocos2d-x问题记录:只在回调函数中执行动作会导致终端
- android学习项目
- IOS 多线程初探(一) - NSThread
- 浅谈Android控件中的ListView优化