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过滤
- 1.1. 建立第一个App
- 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. 接收其他设备的文件
- 2.1. 分享简单的数据
- 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. 打印自定义文档
- 3.1. 管理音频播放
- 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. 布局变更动画
- 4.1. 高效显示Bitmap
- 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. 实现自定义的网络请求
- 5.1. 无线连接设备
- 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. 创建和监视地理围栏
- 6.1. Android联系人信息
- 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. 位置检测
- 7.1. 赋予Notification可穿戴特性
- 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
- 8.1. 创建TV应用
- 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内容
- 10.1. 设计高效的导航
- 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. 维护兼容性
- 11.1. 为多屏幕设计
- 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. 支持多个控制器
- 12.1. 使用触摸手势
- 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. 制定重复定时的任务
- 13.1. 在IntentService中执行后台任务
- 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. 创建功能测试
- 16.1. 测试你的Activity
- 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,也适配于大屏幕,那么则需要使用large
和land
修饰符。
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。
- android适配
- Android 适配
- android适配
- Android适配
- android适配
- android适配
- android 适配
- Android适配
- Android适配
- Android适配
- android适配
- Android适配
- android适配
- Android 适配
- android 适配
- android适配
- Android 适配
- android适配
- C#中检查网络是否连通的二种方法
- C-函数指针
- C#进行SQL执行Insert插入语句后返回新增行的ID
- java Map几种循环遍历方法小结
- PL/SQL Developer如何连接64位的Oracle图解
- Android适配
- Java关键字synchronized详解
- pcduino v3B 安装ROS
- $.ajax()方法
- 协方差的意义和计算公式
- oc: hasPrefix的使用
- stretchableImageWithLeftCapWidth
- 最短路问题
- IP地址、子网掩码、网络号、主机号、网络地址、主机地址