Android 和 Java 资源汇总
API 等级
API等级1:Android 1.0
API等级2:Android 1.1 Petit Four
API等级3:Android 1.5 Cupcake
API等级4:Android 1.6 Donut
API等级5:Android 2.0 Éclair
API等级6:Android 2.0.1 Éclair
API等级7:Android 2.1 Éclair
API等级8:Android 2.2 - 2.2.3 Froyo
API等级9:Android 2.3 - 2.3.2 Gingerbread
API等级10:Android 2.3.3-2.3.7 Gingerbread
API等级11:Android 3.0 Honeycomb
API等级12:Android 3.1 Honeycomb
API等级13:Android 3.2 Honeycomb
API等级14:Android 4.0 - 4.0.2 Ice Cream Sandwich
API等级15:Android 4.0.3 - 4.0.4 Ice Cream Sandwich
API等级16:Android 4.1 Jelly Bean
API等级17:Android 4.2 Jelly Bean
API等级18:Android 4.3 Jelly Bean
API等级19:Android 4.4 KitKat
API等级20:Android 4.4W
API等级21:Android 5.0 Lollipop
API等级22:Android 5.1 Lollipop
API等级23:Android 6.0 Marshmallow
恶补编程基础
Docs
- 官方API docs:英文
- Android API:有些是中文,API Level最高只有19
工具网站
重点推荐
Android开发最佳实践
摘要:前段时间,Google公布了Android开发最佳实践的一系列课程,涉及到一些平时开发过程中应该保持的良好习惯以及如何使用最新的Android Design Support Library来快速实现官方推荐的Material Design样式的应用。如何正确地写出单例模式
摘要:单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。- 近5年133个Java面试问题列表
技术博客
- 中国部分 Android 开发者
- 国外部分 Android 开发者
- 张明云
- 郭霖:《第一行代码》作者
- Trinea:阿里巴巴 Java 开发工程师 Github
- stormzhang
- mariotaku
- eclipse_xu:《Android群英会》作者徐宜生
- xiaanming:大量深入的Android技术文章
- 沧笙踏歌:某 android 新手
- 大头鬼Bruce:中国 RxJava 教父级人物
- yongjhih的Gitbook:RxJava 相关
- DaKa:某Android
- liuhe688
- 嘟嘟独立博客 Java相关
性能优化
- 值得推荐的Android应用性能检测工具列表
- 行者无疆
- Best Practices for Performance
- Android Performance Patterns:YouTube视频
- 胡凯:腾讯Android
- Android-Performance.com:一个只关注安卓性能优化以及最佳实践的Blog
第三方库
MaterialEditText
- MaterialEditText:顾名思义,增加Material Design 特性的EditText
RxJava
资料除了上面的技术博客之外,还有:
- Awesome-RxJava
摘要:RxJava resources - 开发技术前线中的RxJava资料
- 韩国 GDG 的 RxJava 实例
- 一些 RxJava Examples
- 中文 RxDocs
- [The RxJava show with Dan Lew (Part 1)(http://fragmentedpodcast.com/episodes/3/) (Part 2):两篇Fragmented Podcast的RxJava专题,第一篇入门介绍,第二篇讨论了很多RxJava的坑和很多Operators的用法
- Dan Lews RxJava Series
- Learning RxJava With Android by Example
- Intro to Rx you’ve been missing
开源项目
- Android开源项目分类汇总
- Demo大全
- 开源项目集 每天更新最新,最热,最有意思的开源项目
- Google项目合集 供初学者学习代码和规范
- GoogleSamples
- 开源中国客户端代码 值得学习
- 小米开源项目
- Search Android - Google Samples:谷歌官方会经常推出一些Android 新技术的Demo,比如每年的IO App 等等
- Android Api demos:下载SDK 之后,会在
<sdk-insall-folder>/samples/
中查看系统自带的好多Demo。 - 有没有适合 Android 开发初学者的 App 源码推荐?:知乎问题
- Android小项目合集
学习资料
基础
- Android官方培训课程中文版
- Android学习之路:stormzhang的经验之谈
- 慕课网
- Developing Android Apps Google和Udacity合作提供
- Developing Android Apps 中文 SRT 发布区
- Developing Android Apps 第一课中文版发布
- Google Guava官方教程(中文版)
提高
常用图片
开发工具
- AndroidStudio
AndroidStudio社区
提高效率的 Android Studio 技巧汇总
UI
配色
素材
SketchAppSources Sketch资源
EasyIcon 图标搜索
ToIcon 图标搜索
Noun Project 图标搜索
新鲜热辣!一组实用的MATERIAL DESIGN风格素材!
该跟上潮流了!一大波优质的MATERIAL DESIGN资源免费下载
Material Design
MaterialDesign中文版 极客学院
Materialpalette Material配色工具
Materialup Material设计灵感
Material 优设MaterialDesign版
超赞!谷歌设计师的MATERIAL DESIGN实践心得
学霸的自学笔记!MATERIAL DESIGN设计规范学习心得
超全面总结!深聊MATERIAL DESIGN引领的设计趋势
Google Material资源
配色方案
界面模板:手机
界面模板:平板
界面模板:桌面
界面模板:线框图
英文字体Roboto
Roboto介绍
中文字体Noto
组件集psd
组件集ai
组件集sketch
系统图标
Material标准
颜色
黑色:[87% 普通文字] [54% 减淡文字] [26% 禁用状态/提示文字] [12% 分隔线]
白色:[100% 普通文字] [70% 减淡文字] [30% 禁用状态/提示文字] [12% 分隔线]
图标
桌面图标尺寸:48dp x 48dp
小图标尺寸:24dp X 24dp,图形限制在中央20dp X 20dp区域内。
栅格系统。线条、空隙尽量保持2dp宽,圆角半径2dp。特殊情况相应调整。
小图标的颜色使用纯黑与纯白,通过透明度调整:
黑色:[54% 正常状态] [26% 禁用状态]
白色:[100% 正常状态] [30% 禁用状态]
图片
图片上的文字,需要淡淡的遮罩确保其可读性。深色的遮罩透明度在20%-40%之间,浅色的遮罩透明度在40%-60%之间。
Android L可以从图片中提取主色,运用在其他UI元素上
图片的加载过程非常讲究,透明度、曝光度、饱和度3个指标依次变化,效果相当细腻。
文字
英文字体使用Roboto,中文字体使用Noto。
Roboto有6种字重:Thin、Light、Regular、Medium、Bold 和 Black
Noto有7种字重:Thin, Light、DemiLight、Regular、Medium、Bold 和 Black。常用字号
12sp 小字提示
14sp(桌面端13sp) 正文/按钮文字
16sp(桌面端15sp) 小标题
20sp Appbar文字
24sp 大标题
34sp/45sp/56sp/112sp 超大号文字
布局
所有可操作元素最小点击区域尺寸:48dp X 48dp
栅格系统的最小单位是8dp,一切距离、尺寸都应该是8dp的整数倍。
常见尺寸与距离
顶部状态栏高度:24dp
Appbar最小高度:56dp
底部导航栏高度:48dp
悬浮按钮尺寸:56x56dp/40x40dp
用户头像尺寸:64x64dp/40x40dp
小图标点击区域:48x48dp
侧边抽屉到屏幕右边的距离:56dp
卡片间距:8dp
分隔线上下留白:8dp
大多元素的留白距离:16dp
屏幕左右对齐基线:16dp
文字左侧对齐基线:72dp
组件
Bottom Sheets,列表或网格式
Cards,统一2dp圆角
Dialogs
取消类操作项放在左边,引起变化的操作项放在右边。Grids,网格中的单元格间距是2dp或8dp
Lists
如果列表项内容文字超过3行,请改用卡片。如果列表项的主要区别在于图片,请改用网格。Menus
SnackBars & Toasts
Tabs,选中项的下划线高度是2dp。
Text fields,激活状态和错误状态,横线的宽度变为2dp
输入框提示文字,可以在输入内容后,缩小停留在输入框左上角ToolTips
Navigation Drawer
经验教训
- 小米4真机调试,除了开启开发者选项和USB调试外,必须用买手机时附带的数据线。就算小米2的数据线也不行,虽然一样能用来传输文件,但是调试时显示Unknown
- 还是小米,写了个收短信的APP,在模拟器上测试通过。但是在小米4上却无法收到。最后发现权限管理里该APP的默认短信权限是
询问
,把它改成允许
才成功。不知道有没有更好的解决办法,在配置文件里申请了权限还不够。 - 电脑上的文件,在安卓上用自己写的APP打开是乱码。百度了原来安卓上使用的是utf-8编码,在IO流中指定即可。
- 这个实际上是Java写Java工具时遇到过的坑,现在写安卓用到Calendar又想了起来。一定要加上这一句
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
免得出现奇怪的时间问题。 - 如果XML中注册的组件没有写
layout-width
或layout-height
属性,则APP启动时会报错退出。 - Android 重写了 toString()方法,如果需要用Java默认的toString()来识别是否同一对象,需要自己实现一次。
- 使用adb命令安装APK时,就算文件在当前目录下,也必须加一个
/
,如:adb install /xxx.apk
To Be Continued …
最佳实践
App中再按一次退出
法一:1
2
3
4
5
6
7
8
9
10private long exitTime = 0;
@Override
public void onBackPressed() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(this,R.string.press_again_exit_app,Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
}
}
法二:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toast = Toast.makeText(this, "再按一次退出", Toast.LENGTH_LONG);
}
@Override
public void onBackPressed() {
if(null == toast.getView.getParent()){
toast.show();
}else{
System.exit(0);
}
}