首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

Android编码规范

目录介绍 1.命名 1.为什么需要编码规范 2.包命名 3.类和接口命名 4.方法的命名 5.变量命名 6.成员变量命名 7.常量命名 8.异常命名 9.layout 命名 10.id 命名 11.资源命名 2.注释 1.文件注释 2.类注释 3.方法注释 4.类成员变量和常量注释 5.其他注释 6.XML注释 3.代码风格 1.缩进 2.空行 3.行宽 4.其他问题说明 4.1 版本更新情况 4.2 参考链接 4.2 个人博客 0.备注 建议结合代码,看博客更加高效,项目地址:https://github.com/yangchong211/ 博客大汇总,持续更新目录说明,记录所有开源项目和博客 如果那个项目好,可以star一下…… 1.命名 1.为什么需要编码规范? 编码规范对于程序员而言尤为重要,有以下几个原因: 一个软件的生命周期中,80%的花费在于维护 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品 2.包命名 命名规则: 一个唯一包名的前缀总是全部小写的ASCII 字母并且是一个顶级域名 通常是com.edu.gov.mil.net.org包名的后续部分根据不同机构各自内部的命名规范而不尽相同 这类命名规范可能以特定目录名的组成来区分部门 (department) ,项目(project),机器(machine),或注册名(login names)。 例如: com.ycbjie.player 规约:包命名必须以com.ycbjie开始,后面跟有项目名称(或者缩写),再后面为模块名或层级名称。 如:com.ycbjie.项目缩写.模块名 com.ycbjie.player.bookmark 如:com.ycbjie.项目缩写.层级名 com.ycbjie.player.activities 模块包命名的含义 activity 放activity相关的文件 service 放Service相关的文件 broadcast 放广播接收者相关的文件 fragment 放fragment相关的文件 view 放自定义view或者view文件 utils 放工具类文件 bean/entry 放实体类文件 http 放请求网络文件 api 放服务器端提供接口的文件 base 放抽取公共类文件 cache 放缓存处理的文件 db 放数据库处理相关的文件 inter 放接口类文件 listener adapter 放适配器adapter相关的文件 callback 3.类和接口命名 命名规则:类名是个一名词,采用大小写混合的方式,每个单词的首字母大写 尽量使你的类名简洁而富于描述,见名知意。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像 URL,HTML) 接口一般要使用able、ible、er 等后缀 例如: class Raster; class ImageSprite;规约:类名必须使用驼峰规则,即首字母必须大写,如果为词组,则每个单词的首字母也必须要大写,类名必须使用名词,或名词词组。 如:class BookMarkAdd 正确 如:class AddBookReadPlanActivity 错误! 应为 class BookReadPlanAdd 4.方法的命名 命名规则:方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写 例如: public void run(); public String getBookName(); 类中常用方法的命名: 类的获取方法(一般具有返回值)一般要求在被访问的字段名前加上get,如getFirstName(),getLastName()。一般来说,get前缀方法返回的是单个值,find前缀的方法返回的是列表值。 类的设置方法(一般返回类型为void):被访问字段名的前面加上前缀 set,如setFirstName(),setLastName(). 类的布尔型的判断方法一般要求方法名使用单词 is或has 做前缀,如isPersistent(),isString()。或者使用具有逻辑意义的单词,例如equal 或equals。 类的普通方法一般采用完整的英文描述说明成员方法功能,第一个单词尽可能采用动词,首字母小写,如openFile(),addCount()。 构造方法应该用递增的方式写。(参数多的写在后面)。 toString()方法:一般情况下,每个类都应该定义toString(),其格式为: 5.变量命名 命名规则:第一个单词的首字母小写,其后单词的首字母大写 变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。 变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。 尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为 i,j,k,m 和 n,它们一般用于整型;c,d,e,它们一般用于字符型。 规约:变量命名也必须使用驼峰规则,但是首字母必须小写,变量名尽可能的使用名词或名词词组。要求简单易懂,不允许无意义的单词。 如:String bookYCName; 正确 如:String bookYCNameString; 错误! 6.成员变量命名 同变量命名,但不要在私有变量前添加m字样! 7.常量命名 命名规则:类常量的声明,应该全部大写,单词间用下划线隔开 例如:static final int MIN_WIDTH = 4; 例如:static final int MAX_WIDTH = 999; 例如:static final int GET_THE_CPU = 1; 8.异常命名 自定义异常的命名必须以Exception为结尾。已明确标示为一个异常。 9.layout 命名 规约:layout xml 的命名必须以 全部单词小写,单词间以下划线分割,并且使用名词或名词词组,即使用 模块名_功能名称 来命名。 如:knowledge_gained_main.xml 正确 如:list_book.xml 错误! 10.id 命名 规约:layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,要求能够通过id直接理解当前组件要实现的功能。 如:某TextView @+id/tvbookname 错误 !应为 @+id/tv_book_name 如:某EditText @+id/etbookname 错误 !应为 @+id/et_book_name 11.资源命名 规约:layout中所使用的所有资源(如drawable,style等)命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用 模块名_用途 来命名。如果为公共资源,如分割线等,则直接用用途来命名 如:menu_icon_navigate.png 正确 如:某分割线:line.png 或 separator.png 正确 2.注释 Java 程序有两类注释: 实现注释(implementation comments),实现注释是使用/.../和//界定的注释。 文档注释(document comments)。文档注释由/*.../界定。文档注释可以通过javadoc 工具转换成HTML 文件。 1.文件注释 所有的源文件都应该在开头有一个注释,其中列出类名、版本信息、日期和版权声明。 /* * 文件名 * 包含类名列表 * 版本信息,版本号 * 创建日期。 * 版权声明 */ 2.类注释 每一个类都要包含如下格式的注释,以说明当前类的功能等。 /** * <pre> * author: yangchong * blog : www.ycbjie.cn * time : 2017/01/24 * desc : 图片加载工具类 * revise: 修改备注信息 * </pre> */ 3.方法注释 每一个方法都要包含 如下格式的注释 包括当前方法的用途,当前方法参数的含义,当前方法返回值的内容和抛出异常的列表。 /** * 方法的一句话概述 * <p>方法详述(简单方法可不必详述)</p> * @param s 说明参数含义 * @return 说明返回值含义 * @throws IOException 说明发生此异常的条件 * @throws NullPointerException 说明发生此异常的条件 */ 4.类成员变量和常量注释 成员变量和常量需要使用java doc形式的注释,以说明当前变量或常量的含义 /**XXXX含义*/ 或者 //XXXx含义 5.其他注释 方法内部的注释 如果需要多行 使用/…… /形式 如果为单行是用//……形式的注释。 不要再方法内部使用 java doc 形式的注释“/……/” 6.XML注释 规约:如果当前layout 或资源需要被多处调用,或公共使用的layout(若list_item),则需要在xml写明注释。要求注释清晰易懂。 3.代码风格 1.缩进 规约:不允许使用Tab进行缩进,使用空格进行缩进,推荐缩进为2空格。 2.空行 空行将逻辑相关的代码段分隔开,以提高可读性。 下列情况应该总是使用空行: 一个源文件的两个片段(section)之间 类声明和接口声明之间 两个方法之间 方法内的局部变量和方法的第一条语句之间 一个方法内的两个逻辑段之间,用以提高可读性 规约:通常在 变量声明区域之后要用空行分隔,常量声明区域之后要有空行 分隔,方法声明之前要有空行分隔。 3.行宽 无特别规定,因为现在的显示器都比较大,所以推荐使用120进行设置。 4.其他问题说明 4.1 版本更新情况 v1.0.0 2016年11月19日 v1.0.1 2017年1月17日 v1.0.2 2018年2月8日 4.2 参考链接 阿里编码规范文档,可以直接去下载看看,强烈建议程序员认真看看。真心非常不错 4.2 个人博客 github: https://github.com/yangchong211 知乎: https://www.zhihu.com/people/yang-chong-69-24/pins/posts 简书: http://www.jianshu.com/u/b7b2c6ed9284 csdn: http://my.csdn.net/m0_37700275 喜马拉雅听书: http://www.ximalaya.com/zhubo/71989305/ 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1 邮箱:yangchong211@163.com 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100239.headeruserinfo.3.dT4bcV

优秀的个人博客,低调大师

Android Studio 升级

CanaryChannel :金丝雀版, 能获取最新的功能(Bug较多 并且都还没有验证) Develop Channel: 开发者版,到了这个版本大Bug都得到了解决; Beta Channel:测试版,到这里很多小bug都得到了解决,问题还有点,基本可能是我们遇不到的; Stable Channel:正式稳定版,到这里就是官方推荐的最新正式版,不过要等很久,各项功能都很稳定,基本没问题了。适合刚接触AndroidStudio的人使用,和那些最求稳定的开发人员。想我这样喜欢尝鲜的开发人员,就喜欢使用最新的beta版本

优秀的个人博客,低调大师

android fastjson 解析

JSONObject jsonObject = JSON.parseObject(wsResponse);String recommends = jsonObject.getString("recommends");Log.i("ss","__________________________recommends:"+recommends); List<Recommend> contents = JSON.parseArray(recommends, Recommend.class); Log.i("ss","____________________________contents.size:"+contents.size());注意: 1:是Integer不是int2:是implements Serializable,不是implements Serializable, Parcelable public class Recommend implements Serializable { private Integer mediaId; private String title; private Integer timeSpan; private Integer roomId; private String roomName; private Integer gameId; private Float overallScore; private Integer scoreType; private Integer totalViews; private Integer definition; private String createTime; } 本文转自wanqi博客园博客,原文链接http://www.cnblogs.com/wanqieddy/p/4655032.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android BaseRecyclerViewAdapterHelper使用

BaseRecyclerViewAdapterHelper项目下载 1 . 使用 // 基类 具体实现类 布局 数据源 BaseQuickAdapter homeAdapter = new HomeAdapter(R.layout.home_item_view, mDataList); homeAdapter.openLoadAnimation(); // 开启动画 // 加载头布局 View top = getLayoutInflater().inflate(R.layout.top_view, (ViewGroup) mRecyclerView.getParent(), false); // 添加头布局 homeAdapter.addHeaderView(top); // 设置点击事件 homeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { Log.e("adapter", "点击"); } }); // 设置适配器 mRecyclerView.setAdapter(homeAdapter); // 继承自BaseQuickAdapter的适配器 实体类 public class HomeAdapter extends BaseQuickAdapter<HomeItem, BaseViewHolder> { public HomeAdapter(int layoutResId, List data) { super(layoutResId, data); } @Override protected void convert(BaseViewHolder helper, HomeItem item) { // 设置文本 helper.setText(R.id.text, item.getTitle()); // 设置图片 helper.setImageResource(R.id.icon, item.getImageResource()); } } 2. api介绍 adapter.openLoadAnimation(); 开启显示时条目动画 adapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN); 设置开启动画的类型,可选类型有 BaseQuickAdapter.ALPHAIN 透明动画 BaseQuickAdapter.SCALEIN 缩放动画 BaseQuickAdapter.SLIDEIN_BOTTOM 底部滑入 BaseQuickAdapter.SLIDEIN_LEFT 左边滑入 BaseQuickAdapter.SLIDEIN_RIGHT 右边滑入 该参数可以自定义adapter.openLoadAnimation(new CustomAnimation());其中CustomAnimation继承在BaseAnimation,代码如下 public class CustomAnimation implements BaseAnimation { @Override public Animator[] getAnimators(View view) { return new Animator[]{ ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1), ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1) }; } } adapter.isFirstOnly(false); 设置是否仅在第一次加载时显示动画。设置true时,当数据上滑时出现动画,下滑时无动画出现;设置false时,仅在上滑时出现动画. adapter.setNotDoAnimationCount(3); 设置第一屏显示不做动画的数量 adapter.setOnItemClickListener(listener); adapter.setOnItemLongClickListener(listener); 设置条目点击与长点击 adapter.setOnItemChildClickListener(listener); adapter.setOnItemChildLongClickListener(listener); 设置监听事件,其中根据view的id来区分点击的是哪一个控件 adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { switch (view.getId()) { case R.id.img: Log.e("adapter","img"); break; case R.id.tweetName: Log.e("adapter","tweetName"); break; break; default: break; } } }); adapter.addHeaderView(headerView); 添加一个头布局 adapter.addFooterView(footerView, 0); 添加一个尾布局 adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {}, mRecyclerView); 加载更多,其中下拉刷新使用 SwipeRefreshLayout adapter.setOnItemChildClickListener(listener); 设置条目中子控件的点击事件 adapter.setEmptyView(errorView); 设置一个空的布局,可用于网络异常,无数据的情况下 adapter.enableSwipeItem(); adapter.setOnItemSwipeListener(onItemSwipeListener); adapter.enableDragItem(mItemTouchHelper); adapter.setOnItemDragListener(listener); 设置允许左滑右滑动条目 private ItemTouchHelper mItemTouchHelper; private ItemDragAndSwipeCallback mItemDragAndSwipeCallback; mItemDragAndSwipeCallback = new ItemDragAndSwipeCallback(mAdapter); mItemTouchHelper = new ItemTouchHelper(mItemDragAndSwipeCallback); mItemTouchHelper.attachToRecyclerView(mRecyclerView); // 设置滑动方向,拖拽方向 //mItemDragAndSwipeCallback.setDragMoveFlags(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN); mItemDragAndSwipeCallback.setSwipeMoveFlags(ItemTouchHelper.START | ItemTouchHelper.END); mAdapter.enableSwipeItem(); mAdapter.setOnItemSwipeListener(onItemSwipeListener); mAdapter.enableDragItem(mItemTouchHelper); mAdapter.setOnItemDragListener(listener); 3. 多条目适配器 public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder> { public MultipleItemQuickAdapter(Context context, List data) { super(data); addItemType(MultipleItem.TEXT, R.layout.item_text_view); addItemType(MultipleItem.IMG, R.layout.item_image_view); addItemType(MultipleItem.IMG_TEXT, R.layout.item_img_text_view); } @Override protected void convert(BaseViewHolder helper, MultipleItem item) { switch (helper.getItemViewType()) { case MultipleItem.TEXT: helper.setText(R.id.tv, item.getContent()); break; case MultipleItem.IMG_TEXT: switch (helper.getLayoutPosition() % 2) { case 0: helper.setImageResource(R.id.iv, R.mipmap.animation_img1); break; case 1: helper.setImageResource(R.id.iv, R.mipmap.animation_img2); break; default: break; } default: break; } } } 数据源 // 实现MultiItemEntity接口 public class MultipleItem implements MultiItemEntity { public static final int TEXT = 1; public static final int IMG = 2; public static final int IMG_TEXT = 3; private int itemType; public MultipleItem(int itemType) { this.itemType = itemType; } @Override public int getItemType() { return itemType; } } 4. 分组条目适配器 // 继承自BaseSectionQuickAdapter public class SectionAdapter extends BaseSectionQuickAdapter<MySection, BaseViewHolder> { /** * 构造方法 * @param sectionHeadResId 头布局 * @param layoutResId 条目布局 * @param data 数据 */ public SectionAdapter(int layoutResId, int sectionHeadResId, List data) { super(layoutResId, sectionHeadResId, data); } @Override protected void convertHead(BaseViewHolder helper, final MySection item) { helper.setText(R.id.header, item.header); helper.setVisible(R.id.more, item.isMore()); helper.addOnClickListener(R.id.more); } @Override protected void convert(BaseViewHolder helper, MySection item) { Video video = (Video) item.t; switch (helper.getLayoutPosition() % 2) { case 0: helper.setImageResource(R.id.iv, R.mipmap.m_img1); break; case 1: helper.setImageResource(R.id.iv, R.mipmap.m_img2); break; default: break; } helper.setText(R.id.tv, video.getName()); } } 实体类 // 继承SectionEntity public class MySection extends SectionEntity<Video> { public MySection(boolean isHeader, String header) { super(isHeader, header); } public MySection(Video t) { super(t); } }

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册