Android适配

来源:互联网 发布:牛津大学本科知乎 编辑:程序博客网 时间:2024/06/08 15:52


  • 序言
  • 1. Android入门基础:从这里开始
    • 1.1. 建立第一个App
      • 1.1.1. 创建Android项目
      • 1.1.2. 执行Android程序
      • 1.1.3. 建立简单的用户界面
      • 1.1.4. 启动其他的Activity
    • 1.2. 添加ActionBar
      • 1.2.1. 建立ActionBar
      • 1.2.2. 添加Action按钮
      • 1.2.3. 自定义ActionBar的风格
      • 1.2.4. ActionBar的覆盖层叠
    • 1.3. 兼容不同的设备
      • 1.3.1. 适配不同的语言
      • 1.3.2. 适配不同的屏幕
      • 1.3.3. 适配不同的系统版本
    • 1.4. 管理Activity的生命周期
      • 1.4.1. 启动与销毁Activity
      • 1.4.2. 暂停与恢复Activity
      • 1.4.3. 停止与重启Activity
      • 1.4.4. 重新创建Activity
    • 1.5. 使用Fragment建立动态的UI
      • 1.5.1. 创建一个Fragment
      • 1.5.2. 建立灵活动态的UI
      • 1.5.3. Fragments之间的交互
    • 1.6. 数据保存
      • 1.6.1. 保存到Preference
      • 1.6.2. 保存到文件
      • 1.6.3. 保存到数据库
    • 1.7. 与其他应用的交互
      • 1.7.1. Intent的发送
      • 1.7.2. 接收Activity返回的结果
      • 1.7.3. Intent过滤
  • 2. Android分享操作
    • 2.1. 分享简单的数据
      • 2.1.1. 给其他App发送简单的数据
      • 2.1.2. 接收从其他App返回的数据
      • 2.1.3. 给ActionBar增加分享功能
    • 2.2. 分享文件
      • 2.2.1. 建立文件分享
      • 2.2.2. 分享文件
      • 2.2.3. 请求分享一个文件
      • 2.2.4. 获取文件信息
    • 2.3. 使用NFC分享文件
      • 2.3.1. 发送文件给其他设备
      • 2.3.2. 接收其他设备的文件
  • 3. Android多媒体
    • 3.1. 管理音频播放
      • 3.1.1. 控制音量与音频播放
      • 3.1.2. 管理音频焦点
      • 3.1.3. 兼容音频输出设备
    • 3.2. 拍照
      • 3.2.1. 简单的拍照
      • 3.2.2. 简单的录像
      • 3.2.3. 控制相机硬件
    • 3.3. 打印
      • 3.3.1. 打印照片
      • 3.3.2. 打印HTML文档
      • 3.3.3. 打印自定义文档
  • 4. Android图像与动画
    • 4.1. 高效显示Bitmap
      • 4.1.1. 高效加载大图
      • 4.1.2. 非UI线程处理Bitmap
      • 4.1.3. 缓存Bitmap
      • 4.1.4. 管理Bitmap的内存
      • 4.1.5. 在UI上显示Bitmap
    • 4.2. 使用OpenGL ES显示图像
      • 4.2.1. 建立OpenGL ES的环境
      • 4.2.2. 定义Shapes
      • 4.2.3. 绘制Shapes
      • 4.2.4. 运用投影与相机视图
      • 4.2.5. 添加移动
      • 4.2.6. 响应触摸事件
    • 4.3. 添加动画
      • 4.3.1. View间渐变
      • 4.3.2. 使用ViewPager实现屏幕滑动
      • 4.3.3. 展示Card翻转动画
      • 4.3.4. 缩放View
      • 4.3.5. 布局变更动画
  • 5. Android网络连接与云服务
    • 5.1. 无线连接设备
      • 5.1.1. 使用网络服务发现
      • 5.1.2. 使用WiFi建立P2P连接
      • 5.1.3. 使用WiFi P2P服务
    • 5.2. 执行网络操作
      • 5.2.1. 连接到网络
      • 5.2.2. 管理网络的使用情况
      • 5.2.3. 解析XML数据
    • 5.3. 传输数据时避免消耗大量电量
      • 5.3.1. 优化下载以高效地访问网络
      • 5.3.2. 最小化定期更新造成的影响
      • 5.3.3. 重复的下载是冗余的
      • 5.3.4. 根据网络连接类型来调整下载模式
    • 5.4. 云同步
      • 5.4.1. 使用备份API
      • 5.4.2. 使用Google Cloud Messaging
    • 5.5. 解决云同步的保存冲突
    • 5.6. 使用Sync Adapter传输数据
      • 5.6.1. 创建Stub授权器
      • 5.6.2. 创建Stub Content Provider
      • 5.6.3. 创建Sync Adpater
      • 5.6.4. 执行Sync Adpater
    • 5.7. 使用Volley执行网络数据传输
      • 5.7.1. 发送简单的网络请求
      • 5.7.2. 建立请求队列
      • 5.7.3. 创建标准的网络请求
      • 5.7.4. 实现自定义的网络请求
  • 6. Android联系人与位置信息
    • 6.1. Android联系人信息
      • 6.1.1. 获取联系人列表
      • 6.1.2. 获取联系人详情
      • 6.1.3. 使用Intents修改联系人信息
      • 6.1.4. 显示联系人头像
    • 6.2. Android位置信息
      • 6.2.1. 获取最后可知位置
      • 6.2.2. 获取位置更新
      • 6.2.3. 显示位置地址
      • 6.2.4. 创建和监视地理围栏
  • 7. Android可穿戴应用
    • 7.1. 赋予Notification可穿戴特性
      • 7.1.1. 创建Notification
      • 7.1.2. 在Notifcation中接收语音输入
      • 7.1.3. 为Notification添加显示页面
      • 7.1.4. 以Stack的方式显示Notifications
    • 7.2. 创建可穿戴的应用
      • 7.2.1. 创建并运行可穿戴应用
      • 7.2.2. 创建自定义的布局
      • 7.2.3. 添加语音功能
      • 7.2.4. 打包可穿戴应用
      • 7.2.5. 通过蓝牙进行调试
    • 7.3. 创建自定义的UI
      • 7.3.1. 定义Layouts
      • 7.3.2. 创建Card
      • 7.3.3. 创建List
      • 7.3.4. 创建2D Picker
      • 7.3.5. 创建确认界面
      • 7.3.6. 退出全屏的Activity
    • 7.4. 发送并同步数据
      • 7.4.1. 访问可穿戴数据层
      • 7.4.2. 同步数据单元
      • 7.4.3. 传输资源
      • 7.4.4. 发送与接收消息
      • 7.4.5. 处理数据层的事件
    • 7.5. 创建表盘
      • 7.5.1. 设计表盘
      • 7.5.2. 构建表盘服务
      • 7.5.3. 绘制表盘
      • 7.5.4. 在表盘上显示信息
      • 7.5.5. 提供配置 Activity
      • 7.5.6. 定位常见的问题
      • 7.5.7. 优化性能和电池使用时间
    • 7.6. 位置检测
  • 8. Android TV应用
    • 8.1. 创建TV应用
      • 8.1.1. 创建TV应用的第一步
      • 8.1.2. 处理TV硬件部分
      • 8.1.3. 创建TV的布局文件
      • 8.1.4. 创建TV的导航栏
    • 8.2. 创建TV播放应用
      • 8.2.1. 创建目录浏览器
      • 8.2.2. 提供一个Card视图
      • 8.2.3. 创建详情页
      • 8.2.4. 显示正在播放卡片
    • 8.3. 帮助用户在TV上探索内容
      • 8.3.1. TV上的推荐内容
      • 8.3.2. 使得TV App能够被搜索
      • 8.3.3. 使用TV应用进行搜索
    • 8.4. 创建TV游戏应用
    • 8.5. 创建TV直播应用
    • 8.6. TV Apps Checklist
  • 9. Android企业级应用
    • 9.1. Ensuring Compatibility with Managed Profiles
    • 9.2. Implementing App Restrictions
    • 9.3. Building a Work Policy Controller
  • 10. Android交互设计
    • 10.1. 设计高效的导航
      • 10.1.1. 规划屏幕界面与他们之间的关系
      • 10.1.2. 为多种大小的屏幕进行规划
      • 10.1.3. 提供向下和横向导航
      • 10.1.4. 提供向上和历史导航
      • 10.1.5. 综合:设计样例 App
    • 10.2. 实现高效的导航
      • 10.2.1. 使用Tabs创建Swipe视图
      • 10.2.2. 创建抽屉导航
      • 10.2.3. 提供向上的导航
      • 10.2.4. 提供向后的导航
      • 10.2.5. 实现向下的导航
    • 10.3. 通知提示用户
      • 10.3.1. 建立Notification
      • 10.3.2. 当启动Activity时保留导航
      • 10.3.3. 更新Notification
      • 10.3.4. 使用BigView风格
      • 10.3.5. 显示Notification进度
    • 10.4. 增加搜索功能
      • 10.4.1. 建立搜索界面
      • 10.4.2. 保存并搜索数据
      • 10.4.3. 保持向下兼容
    • 10.5. 使得你的App内容可被Google搜索
      • 10.5.1. 为App内容开启深度链接
      • 10.5.2. 为索引指定App内容
  • 11. Android界面设计
    • 11.1. 为多屏幕设计
      • 11.1.1. 兼容不同的屏幕大小
      • 11.1.2. 兼容不同的屏幕密度
      • 11.1.3. 实现可适应的UI
    • 11.2. 创建自定义View
      • 11.2.1. 创建自定义的View类
      • 11.2.2. 实现自定义View的绘制
      • 11.2.3. 使得View可交互
      • 11.2.4. 优化自定义View
    • 11.3. 创建向后兼容的UI
      • 11.3.1. 抽象新的APIs
      • 11.3.2. 代理至新的APIs
      • 11.3.3. 使用旧的APIs实现新API的效果
      • 11.3.4. 使用版本敏感的组件
    • 11.4. 实现辅助功能
      • 11.4.1. 开发辅助程序
      • 11.4.2. 开发辅助服务
    • 11.5. 管理系统UI
      • 11.5.1. 淡化系统Bar
      • 11.5.2. 隐藏系统Bar
      • 11.5.3. 隐藏导航Bar
      • 11.5.4. 全屏沉浸式应用
      • 11.5.5. 响应UI可见性的变化
    • 11.6. 创建使用Material Design的应用
      • 11.6.1. 开始使用Material Design
      • 11.6.2. 使用Material的主题
      • 11.6.3. 创建Lists与Cards
      • 11.6.4. 定义Shadows与Clipping视图
      • 11.6.5. 使用Drawables
      • 11.6.6. 自定义动画
      • 11.6.7. 维护兼容性
  • 12. Android用户输入
    • 12.1. 使用触摸手势
      • 12.1.1. 检测常用的手势
      • 12.1.2. 跟踪手势移动
      • 12.1.3. 滚动手势动画
      • 12.1.4. 处理多点触控手势
      • 12.1.5. 拖拽与缩放
      • 12.1.6. 管理ViewGroup中的触摸事件
    • 12.2. 处理键盘输入
      • 12.2.1. 指定输入法类型
      • 12.2.2. 处理输入法可见性
      • 12.2.3. 支持键盘导航
      • 12.2.4. 处理按键动作
    • 12.3. 支持游戏控制器
      • 12.3.1. 处理控制器输入动作
      • 12.3.2. 在不同的 Android 系统版本支持控制器
      • 12.3.3. 支持多个控制器
  • 13. Android后台任务
    • 13.1. 在IntentService中执行后台任务
      • 13.1.1. 创建IntentService
      • 13.1.2. 发送工作任务到IntentService
      • 13.1.3. 报告后台任务执行状态
    • 13.2. 使用CursorLoader在后台加载数据
      • 13.2.1. 使用CursorLoader执行查询任务
      • 13.2.2. 处理CursorLoader查询的结果
    • 13.3. 管理设备的唤醒状态
      • 13.3.1. 保持设备的唤醒
      • 13.3.2. 制定重复定时的任务
  • 14. Android性能优化
    • 14.1. 管理应用的内存
    • 14.2. 代码性能优化建议
    • 14.3. 提升Layout的性能
      • 14.3.1. 优化layout的层级
      • 14.3.2. 使用include标签重用layouts
      • 14.3.3. 按需加载视图
      • 14.3.4. 使得ListView滑动顺畅
    • 14.4. 优化电池寿命
      • 14.4.1. 监测电量与充电状态
      • 14.4.2. 判断与监测Docking状态
      • 14.4.3. 判断与监测网络连接状态
      • 14.4.4. 根据需要操作Broadcast接受者
    • 14.5. 多线程操作
      • 14.5.1. 在一个线程中执行一段特定的代码
      • 14.5.2. 为多线程创建线程池
      • 14.5.3. 启动与停止线程池中的线程
      • 14.5.4. 与UI线程通信
    • 14.6. 避免出现程序无响应ANR
    • 14.7. JNI使用指南
    • 14.8. 优化多核处理器(SMP)下的Android程序
  • 15. Android安全与隐私
    • 15.1. Security Tips
    • 15.2. 使用HTTPS与SSL
    • 15.3. 为防止SSL漏洞而更新Security
    • 15.4. 使用设备管理条例增强安全性
  • 16. Android测试程序
    • 16.1. 测试你的Activity
      • 16.1.1. 建立测试环境
      • 16.1.2. 创建与执行测试用例
      • 16.1.3. 测试UI组件
      • 16.1.4. 创建单元测试
      • 16.1.5. 创建功能测试
  • Published using GitBook

Android官方培训课程中文版(v0.9.5)

适配不同的屏幕

编写:Lin-H - 原文:http://developer.android.com/training/basics/supporting-devices/screens.html

Android用尺寸和分辨率这两种常规属性对不同的设备屏幕加以分类。我们应该想到自己的app会被安装在各种屏幕尺寸和分辨率的设备中。这样,app中就应该包含一些可选资源,针对不同的屏幕尺寸和分辨率,来优化其外观。

  • 有4种普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
  • 4种普遍分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)

声明针对不同屏幕所用的layout和bitmap,必须把这些可选资源放置在独立的目录中,这与适配不同语言时的做法类似。

同样要注意屏幕的方向(横向或纵向)也是一种需要考虑的屏幕尺寸变化,因此许多app会修改layout,来针对不同的屏幕方向优化用户体验。

创建不同的layout

为了针对不同的屏幕去优化用户体验,我们需要为每一种将要支持的屏幕尺寸创建唯一的XML文件。每一种layout需要保存在相应的资源目录中,目录以-<screen_size>为后缀命名。例如,对大尺寸屏幕(large screens),一个唯一的layout文件应该保存在res/layout-large/中。

Note:为了匹配合适的屏幕尺寸Android会自动地测量我们的layout文件。所以不需要因不同的屏幕尺寸去担心UI元素的大小,而应该专注于layout结构对用户体验的影响。(比如关键视图相对于同级视图的尺寸或位置)

例如,这个工程包含一个默认layout和一个适配大屏幕的layout:

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

layout文件的名字必须完全一样,为了对相应的屏幕尺寸提供最优的UI,文件的内容不同。

如平常一样在app中简单引用:

@Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);}

系统会根据app所运行的设备屏幕尺寸,在与之对应的layout目录中加载layout。更多关于Android如何选择恰当资源的信息,详见Providing Resources。

另一个例子,这一个工程中有为适配横向屏幕的layout:

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

默认的,layout/main.xml文件用作竖屏的layout。

如果想给横屏提供一个特殊的layout,也适配于大屏幕,那么则需要使用largeland修饰符。

 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

Note:Android 3.2及以上版本支持定义屏幕尺寸的高级方法,它允许我们根据屏幕最小长度和宽度,为各种屏幕尺寸指定与密度无关的layout资源。这节课程不会涉及这一新技术,更多信息详见Designing for Multiple Screens。

创建不同的bitmap

我们应该为4种普遍分辨率:低,中,高,超高精度,都提供相适配的bitmap资源。这能使我们的app在所有屏幕分辨率中都能有良好的画质和效果。

要生成这些图像,应该从原始的矢量图像资源着手,然后根据下列尺寸比例,生成各种密度下的图像。

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基准)
  • ldpi: 0.75

这意味着,如果针对xhdpi的设备生成了一张200x200的图像,那么应该为hdpi生成150x150,为mdpi生成100x100, 和为ldpi生成75x75的图片资源。

然后,将这些文件放入相应的drawable资源目录中:

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

任何时候,当引用@drawable/awesomeimage时系统会根据屏幕的分辨率选择恰当的bitmap。

Note:低密度(ldpi)资源是非必要的,当提供了hdpi的图像,系统会把hdpi的图像按比例缩小一半,去适配ldpi的屏幕。

更多关于为app创建图标assets的信息和指导,详见Iconography design。


0 0
原创粉丝点击