SlideShare a Scribd company logo
1 of 116
LAMP 人 主题分享交流会 www.LAMPER.cn QQ 群: 3330312 http://weibo.com/lampercn
Android  开发技术培训 沈大海
知识大纲 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android  手机软硬件形态
Android Framework
Android 体系结构 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android 层次 -kernel Android 基于 Linux 2.6 提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。 Linux Kernel 也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 使用 binder 作为进程间通讯机制,取代传统进程间通讯机制 Linux Kernel Display Driver Camera Driver Flash Driver SD Driver Keypad Driver Touch Driver USB Driver PM Common Kernel (File System, Networking, etc) ‏ Hardware Camera ISP Touch CPU MVED  Driver GCU  Driver MM Accelerate Battery Charging RTC Alarm Modem IPC Driver WIFI/BT Android Enhancement (Binder, Ash, Log, ADB, etc) ‏ Sensors Driver
Android – Hardware Abstraction Layer  用户空间的 C/C++ 库 遵循 Apache 协议 定义 Android 需要 linux driver 实现的接口 将 Android 彻底和硬件抽象出来
Android 层次结构 -Android   Runtime  Android 包含一个核心库的集合,提供大部分在 Java 编程语言核心类库中可用的功能。 Dalvik 虚拟机则是基于寄存器的,而非大多数 虚拟机所采用的基于栈的实现 Dalvik 虚拟机依赖于 Linux  内核提供基本功能, 如线程和底层内存管理。
Android 包含一个 C/C++ 库的集合,供 Android 系统的各个组件使用。这些功能通过 Android 的应用程序框架( application framework )暴露给开发者。下面列出一些核心库: 系统 C 库 多媒体库: OpenCore 界面管理 LibWebCore SGL 3D 库 FreeType SQLite Android 层次结构 -Libraries
Android 层次结构- Application Framework 通过提供开放的开发平台, Android 使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架 APIs 。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括: View ActivityManager ContentProvider NotificationManager
Android 层次结构- Applications  Android 魅力的终极体现: 对用户:良好的用户体验,强大的用户亲和力 对开发者:快速而灵活的开发平台,让开发者的灵感能快速转化为产品
Android 进程运行
基本开发方向 -Android 移植、集成 所需知识 : Linux 操作系统知识 Linux 内核知识 Linux 驱动程序知识  Android 底层库 Dalvik 虚拟机 Android GUI 系统 音频、视频和多媒体 电话部分的 连接部分 传感器部分 编译工具 Vim 或者 Emacs Android Shell  脚本 Android makefile Android python 使用 Android/build/tools
基本开发方向 - 应用开发 所需知识 : Android  核心组件 Android UI 组件 Android GUI 编程 Android 事件处理 NDK 开发 OpenGL 开发 编译工具 Eclipse Java ,C 语言
基本开发方向— Android 系统开发 所需知识 : Linux 操作系统知识 Linux 内核知识 Linux 驱动程序知识  Android 底层库 Dalvik 虚拟机 Android GUI 系统 音频、视频和多媒体 电话部分的 连接部分 传感器部分 编译工具 Vim 或者 Emacs Android Shell  脚本 Android makefile Android/build/tools Java 开发 JNI 技术
三种开发形式 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android Applications
Android apk build and packaging
Android application unpackaging and run
AAPT 打包示意图
限定符的类型和有效的值  限定符 有效值 语言 语言码,遵循 ISO 639-1 标准,小写,如 en, zh. 地区 遵循 ISO 3166-1-alpha-2 标准,大写,前面加小写的 “ r ” ,例如: rUS , rCN 屏幕朝向 port, land, square 屏幕像素密度 92dpi, 108dpi 等 触摸屏类型 notouch, stylus, finger 键盘是否可用 keysexposed, keyshidden 首选的输入法 nokeys, qwerty, 12key 首选非触摸导航方法 nonav, dpad, trackball, wheel 屏幕尺寸 320x240, 640x480 等,大尺寸必须在前
资源管理框架
Activity 介绍 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
基础 UI ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Application ui description 通过绑定 Activity 的 setContentView() 方法,在 onResume 之后绘制
A tree-structure ui
View/windows base
 
图形系统层次结构 Android Apps Application Framework Native Libraries HAL SurfaceFlinger Activity Manager  Window Manager View System Display Driver(FrameBuffer..) View ---- Image, Shape, Text, Animation, Canvas...
2D graphics process Activity android.view.* android.graphics.* (Canvas, Paint,Path, Picture,Region...) ActivityManager WindowManager frameworks/base/core/jni/android/graphic SurfaceFlinger HAL / FrameBuffer Get  Surface  Obj. /external/skia
3D graphics process Activity android.opengl.* javax.microedition.khronos.egl javax.microedition.khronos.opengl (GLSurfaceView...) ActivityManager WindowManager frameworks/.../gles_jni/* SurfaceFlinger HAL / FrameBuffer Get  Surface  Obj. /frameworks/base/opengl
Android  图形系统  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android  图形系统
Android- 动画 ,[object Object],[object Object],[object Object],[object Object],动画的类型 Xml 定义动画使用的配置节点 编码定义动画使用的类 渐变透明度动画效果 <alpha/>  AlphaAnimation 渐变尺寸缩放动画效果 <scale/>  ScaleAnimation 画面位置移动动画效果 <translate/>  TranslateAnimation 画面 旋转 动画效果 <rotate/> RotateAnimation
Android- 动画 ( 缩放 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 动画 ( 缩放 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 动画 ( 透明 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 动画 ( 移动 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 动画 ( 旋转 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 动画 (frame) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
事件处理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 手势识别 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 传感器 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 传感器 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 传感器 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android Application ,[object Object],[object Object],[object Object]
Activity 所绑定的进程名称 ,[object Object],[object Object],[object Object],[object Object],[object Object]
进程与生命周期 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ActivityThread ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],进程中的线程 APK Package Process Thread Looper Message Queue Thread External Service Calls Intent Receiver Activity Activity UI Events System Events Local Service Call
Android 消息系统 Loop Handler  ,[object Object],[object Object],[object Object],[object Object],[object Object]
Activity 的四个状态 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Activity 的各个回调函数与状态   之间的关系 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Android- 应用程序的响应性
Intent
Intent  跟 pendingIntent  间的联系 ,[object Object],[object Object]
BroadcastReceiver 简介 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Service 简   介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Service  的生命周期
Android- 与服务进行进程间通信 ,[object Object],[object Object],[object Object],[object Object]
Android-AIDL 实现进程间通信 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android-AIDL 实现进程间通信 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android-AIDL 实现进程间通信 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android-AIDL 实现进程间通信 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android-AIDL 实现进程间通信 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
IPC 框架分析  ,[object Object],[object Object],[object Object]
IPC- 对象请求代理架构 ,[object Object],[object Object],[object Object]
Android 的对象代理结构  Service Manager 提供了 add service check service 两个重要的方法,并且维护了一个服务列表记录登记的服务名称和句柄  这样 client 应用能够找到所需要的 service
Binder architecture  Binder java Binder c++ Java binder  framework Native binder framework Binder core system BBinder->IBinder<-BpBinder Binder Adapter IPCThreadeState,ProcessState  Binder linux driver
Binder 核心类 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Service  闭合循环框架 ,[object Object],[object Object]
Android  启动过程 ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],Android 中的数据保存
文件操作 ,[object Object],[object Object],[object Object],[object Object]
Preferences ,[object Object],[object Object],[object Object],SharedPreferences settings = getSharedPreferences( SETTING_INFOS, 0); String name = settings.getString( NAME, &quot;&quot;); String password = settings.getString( PASSWORD, &quot;&quot;);
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 使用嵌入式 SQLite ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 使用嵌入式 SQLite ,[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 单元测试 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android-SQLite3 工具使用 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ContentProvider 简介 ,[object Object],[object Object],[object Object],[object Object]
Android- 使用 ContentProvider ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 使用 ContentProvider
Android- 活动墙纸 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 活动墙纸 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 活动墙纸 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Widget ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
获取手机所有连接管理对象 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
检查网络状态变化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
AsyncTask ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
AsyncTask 是抽象类 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 互联网 ( 多线程下载 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ListView 优化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 多媒体 ( 照相机 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 多媒体 ( 照相机 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Android- 多媒体 ( 照相机 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
地图开发 ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用 Google 地图 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
定位系统 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Android Ndk 开发 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
应用程序的优化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]

More Related Content

Similar to Android应用开发 - 沈大海

Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Liyao Chen
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文banq jdon
 
移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发fangdeng
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 longMeng-Ru (Raymond) Tsai
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile appsAdam Lu
 
Azure Functions
Azure FunctionsAzure Functions
Azure FunctionsDino Wang
 
移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发完颜 小卓
 
Android开发基础
Android开发基础Android开发基础
Android开发基础ykdsg
 
Android开发概览
Android开发概览Android开发概览
Android开发概览heyfluke
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
Elaster cap 云应用开发平台介绍
Elaster cap 云应用开发平台介绍Elaster cap 云应用开发平台介绍
Elaster cap 云应用开发平台介绍tcloudcomputing
 
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集ASUSCloud
 

Similar to Android应用开发 - 沈大海 (20)

Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文
 
移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发
 
Android ADK
Android ADKAndroid ADK
Android ADK
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 long
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发移动互联网时代的Mobile app设计和开发
移动互联网时代的Mobile app设计和开发
 
敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
Android开发概览
Android开发概览Android开发概览
Android开发概览
 
I os 16
I os 16I os 16
I os 16
 
Jobforcompal
JobforcompalJobforcompal
Jobforcompal
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure Functions
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
Elaster cap 云应用开发平台介绍
Elaster cap 云应用开发平台介绍Elaster cap 云应用开发平台介绍
Elaster cap 云应用开发平台介绍
 
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集
0527 asus cloud day 開放。引領數位內容進軍國際 – 華碩雲端市集
 

More from Shaoning Pan

海量数据计算架构实现
海量数据计算架构实现海量数据计算架构实现
海量数据计算架构实现Shaoning Pan
 
Technology Changes
Technology ChangesTechnology Changes
Technology ChangesShaoning Pan
 
一淘广告机器学习
一淘广告机器学习一淘广告机器学习
一淘广告机器学习Shaoning Pan
 
海量用户数据处理及其在一淘广告和推荐中的应用
海量用户数据处理及其在一淘广告和推荐中的应用海量用户数据处理及其在一淘广告和推荐中的应用
海量用户数据处理及其在一淘广告和推荐中的应用Shaoning Pan
 
大型互联网广告应用系统架构
大型互联网广告应用系统架构大型互联网广告应用系统架构
大型互联网广告应用系统架构Shaoning Pan
 
Tanx成长之路 real time media
Tanx成长之路 real time mediaTanx成长之路 real time media
Tanx成长之路 real time mediaShaoning Pan
 
移动社交网络动态框架 李章晶
移动社交网络动态框架 李章晶移动社交网络动态框架 李章晶
移动社交网络动态框架 李章晶Shaoning Pan
 
移动互联网产业分析 梁文静
移动互联网产业分析 梁文静移动互联网产业分析 梁文静
移动互联网产业分析 梁文静Shaoning Pan
 
曾勇 Elastic search-intro
曾勇 Elastic search-intro曾勇 Elastic search-intro
曾勇 Elastic search-introShaoning Pan
 
Hadoop的etl任务—flume使用及其 优化-品友互动
 Hadoop的etl任务—flume使用及其 优化-品友互动 Hadoop的etl任务—flume使用及其 优化-品友互动
Hadoop的etl任务—flume使用及其 优化-品友互动Shaoning Pan
 
互联网广告发展的趋势-品友互动
互联网广告发展的趋势-品友互动 互联网广告发展的趋势-品友互动
互联网广告发展的趋势-品友互动 Shaoning Pan
 
互联网行为分析和数据挖掘-品友互动
互联网行为分析和数据挖掘-品友互动互联网行为分析和数据挖掘-品友互动
互联网行为分析和数据挖掘-品友互动Shaoning Pan
 
如何构建一个高可用可扩展的广告投放平台-品友互动
如何构建一个高可用可扩展的广告投放平台-品友互动 如何构建一个高可用可扩展的广告投放平台-品友互动
如何构建一个高可用可扩展的广告投放平台-品友互动 Shaoning Pan
 
网站前段性能优化-品友互动
 网站前段性能优化-品友互动 网站前段性能优化-品友互动
网站前段性能优化-品友互动Shaoning Pan
 
品友互动 Hadoop的etl任务—flume使用及其 优化
品友互动 Hadoop的etl任务—flume使用及其 优化品友互动 Hadoop的etl任务—flume使用及其 优化
品友互动 Hadoop的etl任务—flume使用及其 优化Shaoning Pan
 
分布式计算与Hadoop - 刘鹏
分布式计算与Hadoop - 刘鹏分布式计算与Hadoop - 刘鹏
分布式计算与Hadoop - 刘鹏Shaoning Pan
 
Cassandra实时统计分享 - 赵伟
Cassandra实时统计分享  - 赵伟Cassandra实时统计分享  - 赵伟
Cassandra实时统计分享 - 赵伟Shaoning Pan
 
淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林Shaoning Pan
 
身随心动—《汉字工具箱》开发历程 姚鸿滨
身随心动—《汉字工具箱》开发历程 姚鸿滨身随心动—《汉字工具箱》开发历程 姚鸿滨
身随心动—《汉字工具箱》开发历程 姚鸿滨Shaoning Pan
 
Redis的一点想法 - 杨海潮
Redis的一点想法 - 杨海潮Redis的一点想法 - 杨海潮
Redis的一点想法 - 杨海潮Shaoning Pan
 

More from Shaoning Pan (20)

海量数据计算架构实现
海量数据计算架构实现海量数据计算架构实现
海量数据计算架构实现
 
Technology Changes
Technology ChangesTechnology Changes
Technology Changes
 
一淘广告机器学习
一淘广告机器学习一淘广告机器学习
一淘广告机器学习
 
海量用户数据处理及其在一淘广告和推荐中的应用
海量用户数据处理及其在一淘广告和推荐中的应用海量用户数据处理及其在一淘广告和推荐中的应用
海量用户数据处理及其在一淘广告和推荐中的应用
 
大型互联网广告应用系统架构
大型互联网广告应用系统架构大型互联网广告应用系统架构
大型互联网广告应用系统架构
 
Tanx成长之路 real time media
Tanx成长之路 real time mediaTanx成长之路 real time media
Tanx成长之路 real time media
 
移动社交网络动态框架 李章晶
移动社交网络动态框架 李章晶移动社交网络动态框架 李章晶
移动社交网络动态框架 李章晶
 
移动互联网产业分析 梁文静
移动互联网产业分析 梁文静移动互联网产业分析 梁文静
移动互联网产业分析 梁文静
 
曾勇 Elastic search-intro
曾勇 Elastic search-intro曾勇 Elastic search-intro
曾勇 Elastic search-intro
 
Hadoop的etl任务—flume使用及其 优化-品友互动
 Hadoop的etl任务—flume使用及其 优化-品友互动 Hadoop的etl任务—flume使用及其 优化-品友互动
Hadoop的etl任务—flume使用及其 优化-品友互动
 
互联网广告发展的趋势-品友互动
互联网广告发展的趋势-品友互动 互联网广告发展的趋势-品友互动
互联网广告发展的趋势-品友互动
 
互联网行为分析和数据挖掘-品友互动
互联网行为分析和数据挖掘-品友互动互联网行为分析和数据挖掘-品友互动
互联网行为分析和数据挖掘-品友互动
 
如何构建一个高可用可扩展的广告投放平台-品友互动
如何构建一个高可用可扩展的广告投放平台-品友互动 如何构建一个高可用可扩展的广告投放平台-品友互动
如何构建一个高可用可扩展的广告投放平台-品友互动
 
网站前段性能优化-品友互动
 网站前段性能优化-品友互动 网站前段性能优化-品友互动
网站前段性能优化-品友互动
 
品友互动 Hadoop的etl任务—flume使用及其 优化
品友互动 Hadoop的etl任务—flume使用及其 优化品友互动 Hadoop的etl任务—flume使用及其 优化
品友互动 Hadoop的etl任务—flume使用及其 优化
 
分布式计算与Hadoop - 刘鹏
分布式计算与Hadoop - 刘鹏分布式计算与Hadoop - 刘鹏
分布式计算与Hadoop - 刘鹏
 
Cassandra实时统计分享 - 赵伟
Cassandra实时统计分享  - 赵伟Cassandra实时统计分享  - 赵伟
Cassandra实时统计分享 - 赵伟
 
淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林
 
身随心动—《汉字工具箱》开发历程 姚鸿滨
身随心动—《汉字工具箱》开发历程 姚鸿滨身随心动—《汉字工具箱》开发历程 姚鸿滨
身随心动—《汉字工具箱》开发历程 姚鸿滨
 
Redis的一点想法 - 杨海潮
Redis的一点想法 - 杨海潮Redis的一点想法 - 杨海潮
Redis的一点想法 - 杨海潮
 

Android应用开发 - 沈大海

  • 1. LAMP 人 主题分享交流会 www.LAMPER.cn QQ 群: 3330312 http://weibo.com/lampercn
  • 3.
  • 6.
  • 7. Android 层次 -kernel Android 基于 Linux 2.6 提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。 Linux Kernel 也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 使用 binder 作为进程间通讯机制,取代传统进程间通讯机制 Linux Kernel Display Driver Camera Driver Flash Driver SD Driver Keypad Driver Touch Driver USB Driver PM Common Kernel (File System, Networking, etc) ‏ Hardware Camera ISP Touch CPU MVED Driver GCU Driver MM Accelerate Battery Charging RTC Alarm Modem IPC Driver WIFI/BT Android Enhancement (Binder, Ash, Log, ADB, etc) ‏ Sensors Driver
  • 8. Android – Hardware Abstraction Layer 用户空间的 C/C++ 库 遵循 Apache 协议 定义 Android 需要 linux driver 实现的接口 将 Android 彻底和硬件抽象出来
  • 9. Android 层次结构 -Android Runtime Android 包含一个核心库的集合,提供大部分在 Java 编程语言核心类库中可用的功能。 Dalvik 虚拟机则是基于寄存器的,而非大多数 虚拟机所采用的基于栈的实现 Dalvik 虚拟机依赖于 Linux 内核提供基本功能, 如线程和底层内存管理。
  • 10. Android 包含一个 C/C++ 库的集合,供 Android 系统的各个组件使用。这些功能通过 Android 的应用程序框架( application framework )暴露给开发者。下面列出一些核心库: 系统 C 库 多媒体库: OpenCore 界面管理 LibWebCore SGL 3D 库 FreeType SQLite Android 层次结构 -Libraries
  • 11. Android 层次结构- Application Framework 通过提供开放的开发平台, Android 使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架 APIs 。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括: View ActivityManager ContentProvider NotificationManager
  • 12. Android 层次结构- Applications Android 魅力的终极体现: 对用户:良好的用户体验,强大的用户亲和力 对开发者:快速而灵活的开发平台,让开发者的灵感能快速转化为产品
  • 14. 基本开发方向 -Android 移植、集成 所需知识 : Linux 操作系统知识 Linux 内核知识 Linux 驱动程序知识 Android 底层库 Dalvik 虚拟机 Android GUI 系统 音频、视频和多媒体 电话部分的 连接部分 传感器部分 编译工具 Vim 或者 Emacs Android Shell 脚本 Android makefile Android python 使用 Android/build/tools
  • 15. 基本开发方向 - 应用开发 所需知识 : Android 核心组件 Android UI 组件 Android GUI 编程 Android 事件处理 NDK 开发 OpenGL 开发 编译工具 Eclipse Java ,C 语言
  • 16. 基本开发方向— Android 系统开发 所需知识 : Linux 操作系统知识 Linux 内核知识 Linux 驱动程序知识 Android 底层库 Dalvik 虚拟机 Android GUI 系统 音频、视频和多媒体 电话部分的 连接部分 传感器部分 编译工具 Vim 或者 Emacs Android Shell 脚本 Android makefile Android/build/tools Java 开发 JNI 技术
  • 17.
  • 19. Android apk build and packaging
  • 22. 限定符的类型和有效的值 限定符 有效值 语言 语言码,遵循 ISO 639-1 标准,小写,如 en, zh. 地区 遵循 ISO 3166-1-alpha-2 标准,大写,前面加小写的 “ r ” ,例如: rUS , rCN 屏幕朝向 port, land, square 屏幕像素密度 92dpi, 108dpi 等 触摸屏类型 notouch, stylus, finger 键盘是否可用 keysexposed, keyshidden 首选的输入法 nokeys, qwerty, 12key 首选非触摸导航方法 nonav, dpad, trackball, wheel 屏幕尺寸 320x240, 640x480 等,大尺寸必须在前
  • 24.
  • 25.
  • 26. Application ui description 通过绑定 Activity 的 setContentView() 方法,在 onResume 之后绘制
  • 29.  
  • 30. 图形系统层次结构 Android Apps Application Framework Native Libraries HAL SurfaceFlinger Activity Manager Window Manager View System Display Driver(FrameBuffer..) View ---- Image, Shape, Text, Animation, Canvas...
  • 31. 2D graphics process Activity android.view.* android.graphics.* (Canvas, Paint,Path, Picture,Region...) ActivityManager WindowManager frameworks/base/core/jni/android/graphic SurfaceFlinger HAL / FrameBuffer Get Surface Obj. /external/skia
  • 32. 3D graphics process Activity android.opengl.* javax.microedition.khronos.egl javax.microedition.khronos.opengl (GLSurfaceView...) ActivityManager WindowManager frameworks/.../gles_jni/* SurfaceFlinger HAL / FrameBuffer Get Surface Obj. /frameworks/base/opengl
  • 33.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73. Android 的对象代理结构 Service Manager 提供了 add service check service 两个重要的方法,并且维护了一个服务列表记录登记的服务名称和句柄 这样 client 应用能够找到所需要的 service
  • 74. Binder architecture Binder java Binder c++ Java binder framework Native binder framework Binder core system BBinder->IBinder<-BpBinder Binder Adapter IPCThreadeState,ProcessState Binder linux driver
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.

Editor's Notes

  1. 1)         Java 层 a)         类 Resources Ophone 为访问不同类型的资源提供了不同的接口,这些接口被封装在类 Resources 中。例如访问字符串的接口 getString() ,访问 drawable 类型的接口 getDrawable() 等等。该类管理着另外两个重要的类 Configuration 和 AssetManager 。 b)         类 Configuration 类 Configuration 保存了当前系统中的配置,例如字体,语言等等信息。 c)         类 AssetManager 类 AssetManager 提供了以数据流方式访问应用程序资源的方法。它通过 native 的方法来实现访问资源。 AssetManager 管理的资源有两个来源:一个是应用程序的资源,通过访问应用程序的 apk 文件得到;另一个是系统的资源,通过访问包含系统资源的 apk 文件获得。 2)         Native 层 Native 层负责管理相应的 apk 文件,如上面所述,有两个文件,一个是系统的 apk 文件,另一个是应用程序自身的 apk 文件。 Native 层会把资源组织成一个资源表( Resource Table )用来提高访问资源的速度。
  2. 启动 Frame 动画的代码 animationDrawable.start(); 不能应用在 OnCreate() 方法中,因为在 OnCreate() 中 AnimationDrawable 还没有完全的与 ImageView 绑定。在 OnCreate() 中启动动画,只能看到第一张图片。这里在触摸事件中实现的。
  3. 最快 : SensorManager.SENSOR_DELAY_FASTEST 最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和 UI 的性能。 游戏: SensorManager.SENSOR_DELAY_GAME 游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。 普通 :SensorManager.SENSOR_DELAY_NORMAL 标准延迟 : 对于一般的益智类或 EASY 级别的游戏可以使用 , 但过低的采样率可能对一些赛车类游戏有跳帧现象 . 用户界面 :SensorManager.SENSOR_DELAY_UI 一般对于屏幕方向自动旋转使用 , 相对节省电能和逻辑处理 , 一般游戏开发中我们不使用 .
  4. /*x 该值表示方位, 0 代表北( North ); 90 代表东( East ); 180 代表南( South ); 270 代表西( West ) 如果 x 值正好是这 4 个值之一,并且手机是水平放置,手机的顶部对准的方向就是该值代表的方向。 y 值表示倾斜度,或手机翘起的程度。当手机绕着 X 轴倾斜时该值发生变化。 y 值的取值范围是 -180≤y 值 ≤ 180 。 假设将手机屏幕朝上水平放在桌子上,这时如果桌子是完全水平的, y 值应该是 0 (由于很少有桌子是绝对水平的, 因此,该值很可能不为 0 ,但一般都是 -5 和 5 之间的某个值)。这时从手机顶部开始抬起,直到将手机沿 X 轴旋转 180 度(屏幕向下水平放在桌面上)。 在这个旋转过程中, y 值会在 0 到 -180 之间变化,也就是说,从手机顶部抬起时, y 的值会逐渐变小, 直到等于 -180 。如果从手机底部开始抬起,直到将手机沿 X 轴旋转 180 度,这时 y 值会在 0 到 180 之间变化。 也就是 y 值会逐渐增大,直到等于 180 。可以利用 y 值和 z 值来测量桌子等物体的倾斜度。 z 值表示手机沿着 Y 轴的滚动角度。表示手机沿着 Y 轴的滚动角度。取值范围是 -90≤z 值≤ 90 。 假设将手机屏幕朝上水平放在桌面上,这时如果桌面是平的, z 值应为 0 。将手机左侧逐渐抬起时, z 值逐渐变小,直到手机垂直于桌面放置,这时 z 值是 -90 。将手机右侧逐渐抬起时, z 值逐渐增大, 直到手机垂直于桌面放置,这时 z 值是 90 。在垂直位置时继续向右或向左滚动, z 值会继续在 -90 至 90 之间变化。 */
  5. &lt;declare-styleable name=&amp;quot;Wallpaper&amp;quot; &gt; &lt;!-- Component name of an activity that allows the user to modify the current settings for this wallpaper. --&gt; &lt;attr name=&amp;quot;settingsActivity&amp;quot; /&gt; &lt;!-- Reference to a the wallpaper&apos;s thumbnail bitmap. --&gt; &lt;attr name=&amp;quot;thumbnail&amp;quot; format=&amp;quot;reference&amp;quot; /&gt; &lt;!-- Name of the author of this component, e.g. Google. --&gt; &lt;attr name=&amp;quot;author&amp;quot; format=&amp;quot;reference&amp;quot; /&gt; &lt;!-- Short description of the component&apos;s purpose or behavior. --&gt; &lt;attr name=&amp;quot;description&amp;quot; /&gt; &lt;/declare-styleable&gt;
  6. package cn.shen.wallpaper.service; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Handler; import android.service.wallpaper.WallpaperService; import android.view.MotionEvent; import android.view.SurfaceHolder; /* * This animated wallpaper draws a rotating wireframe cube. */ public class LiveWallpaperService extends WallpaperService { private final Handler handler = new Handler(); /** * 创建引擎 */ public Engine onCreateEngine() { return new CubeEngine(); } /** * 立方体引擎 */ class CubeEngine extends Engine { private final Paint mPaint = new Paint();// 画板 private float xOffset ;// 偏移量 private float touchX = -1;// x 触点 private float touchY = -1;// y 触点 private float centerX;// x 中心 private float centerY;// y 中心 private boolean visible;// 可见 private float step = 2; private float downX = -1; private float downY = -1; private float upX = -1; private float upY = -1; /** * 分线程运行程序 */ private Runnable r = new Runnable() { public void run() { doDraw(); } }; CubeEngine() { // Create a Paint to draw the lines for our cube // 初始化 Paint paint = mPaint;// 油漆 , 涂料 paint.setColor(0xffff0000);// 颜色 paint.setAntiAlias( true );// 抗锯齿 paint.setStrokeWidth(2);// 笔画宽度 paint.setStrokeCap(Paint.Cap. ROUND );// 帽形 paint.setStyle(Paint.Style. STROKE );// 样式 } // 启用触碰事件 public void onCreate(SurfaceHolder surfaceHolder) { super .onCreate(surfaceHolder); setTouchEventsEnabled( true ); } // public void onDestroy() { super .onDestroy(); handler.removeCallbacks(r);// 删除队列中所有该回调消息 } // 可见性发生变化 public void onVisibilityChanged( boolean visible) { this .visible = visible; if (visible) { doDraw();// 画框 } else { // 删除消息中的队列 handler.removeCallbacks(r); } } // 表面变化时 public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { super .onSurfaceChanged(holder, format, width, height); // store the center of the surface, so we can draw the cube in the // right spot centerX = width / 2.0f;// 计算中心位置 ( 表面包容器宽度的一半 ) centerY = height / 2.0f;// 计算中心位置 ( 表面包容器高度的一半 ) doDraw(); } // 表面销毁时 public void onSurfaceDestroyed(SurfaceHolder holder) { super .onSurfaceDestroyed(holder); this .visible = false ; handler.removeCallbacks(r); } // 响应偏移量发生改变时事件 WallpaperManager.setWallpaperOffsets(). public void onOffsetsChanged( float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { this .xOffset = xOffset; doDraw();// 画框 } /* * Store the position of the touch event so we can use it for drawing * later */ // 响应触碰事件 public void onTouchEvent(MotionEvent event) { // if (event.getAction() == MotionEvent.ACTION_MOVE) { // this.touchX = event.getX();// 得到移动点 x 坐标 // this.touchY = event.getY();// 得到移动点 y 坐标 // } else { // this.touchX = -1; // this.touchY = -1; // } if (event.getAction() == MotionEvent. ACTION_DOWN ) { this .downX = event.getX(); this .downY = event.getY(); } else { this .upX = event.getX(); this .upY = event.getY(); } super .onTouchEvent(event); } /* * Draw one frame of the animation. This method gets called repeatedly * by posting a delayed Runnable. You can do any drawing you want in * here. This example draws a wireframe cube. */ void doDraw() { final SurfaceHolder holder = getSurfaceHolder();// 得到表面包容器 Canvas c = null ; try { c = holder.lockCanvas();// 锁定画布 if (c != null ) { drawCube(c);// 画立方体 drawTouchPoint(c);// 画触点 } } finally { if (c != null ) holder.unlockCanvasAndPost(c);// 解锁画布并发送 } // Reschedule the next redraw handler.removeCallbacks(r);// 画完图形后 , 删除对立中消息 . if (visible) { handler.postDelayed(r, 1000 / 25);// 若墙纸可见 , 发送延迟消息 } } /* * Draw a wireframe cube by drawing 12 3 dimensional lines between * adjacent corners of the cube 绘制立方体 */ void drawCube(Canvas c) { if (step &gt;= this .centerX) { step = 2; } float left = this .centerX - step; float top = this .centerY + step; float right = this .centerX + step; float bottom = this .centerY - step; c.save(); c.translate(0, 0);// 移动到中间位置 c.drawColor(0xff000000);// 用指定颜色填充画布的位图 c.drawLine(left, top, right, top, mPaint); c.drawLine(right, top, right, bottom, mPaint); c.drawLine(left, bottom, right, bottom, mPaint); c.drawLine(left, top, left, bottom, mPaint); c.restore(); step = step + 2; } /* * Draw a circle around the current touch point, if any. */ void drawTouchPoint(Canvas c) { if (downX &gt; 0 &amp;&amp; upX &gt; 0 &amp;&amp; (!(downX == upX &amp;&amp; downY == upY))) { float originalX = (downX + upX) / 2 ; float originalY = (downY + upY) / 2 ; double radius = Math. sqrt (Math. pow (upX - downX,2) + Math. pow (upY - downY,2)) / 2 ; c.drawCircle(originalX, originalY, new Float(radius), mPaint); } } } }
  7. &lt;style name=&amp;quot;Widget.ProgressBar.Horizontal&amp;quot;&gt; &lt;item name=&amp;quot;android:indeterminateOnly&amp;quot;&gt;false&lt;/item&gt; &lt;item name=&amp;quot;android:progressDrawable&amp;quot;&gt;@android:drawable/progress_horizontal&lt;/item&gt; &lt;item name=&amp;quot;android:indeterminateDrawable&amp;quot;&gt;@android:drawable/progress_indeterminate_horizontal&lt;/item&gt; &lt;item name=&amp;quot;android:minHeight&amp;quot;&gt;20dip&lt;/item&gt; &lt;item name=&amp;quot;android:maxHeight&amp;quot;&gt;20dip&lt;/item&gt; &lt;/style&gt;