首页 文章 精选 留言 我的

精选列表

搜索[应用开发工具],共10000篇文章
优秀的个人博客,低调大师

TLv8 IDE v2.4.3 已经发布,基于 Eclipse 的快速开发工具

TLv8 IDE v2.4.3 已经发布,此版本更新内容包括: 1、Studio透视图默认展示项目资源管理器和包资源管理器; 2、放弃自定义资源视图,直接使用项目资源管理器; 3、补充源码说明; 4、表编辑器增加编辑默认值功能; 5、优化功能树编辑器:添加layui图标属性编辑; 6、解决win10及以下版本无法运行cef的问题(报表编辑器)。 --------------------一些已知bug-------------------

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

TLv8 IDE v2.2.1 已经发布,基于 Eclipse 的快速开发工具

TLv8 IDE v2.2.1 已经发布,此版本更新内容包括: 1、解决报表设计器(ureport)兼容问题: Windows系统下使用Edge浏览器内核在win10以下系统不支持,改为chromium存在无法初始化的问题; Linux和macOS下使用swt自带的浏览器。 2、优化页面设计器右键菜单方法; 3、基础插件的jdk兼容到1.6; 4、解决流程设计器model类型转换问题; 5、添加js编辑器功能部件【可选】; 6、解决页面设计器在低版本的Linux系统下无法显示的问题; 7、修改移动版页面设计器资源引用及屏幕适应问题; 8、插件和功能部件重新梳理,按照用途重新组装; 9、修改项目结构,集成了平台必要的插件(tern和chromium-swt); 10、添加【数据库】功能部件描述,数据库插件可以单独安装; 11、补充了各个插件的说明; 12、补充了插件的汉化文件。 ---测试完善v2.2.0修改的内容---

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

每日一博 | 自己手动实现一个 Node.js-CLI 开发工具

前言 看如今火热的前端框架,都有自己的CLI工具,例如Vue CLI,creat-react-app等等,搭建项目十分的方便。所以我也在想,要不也实现一个CLI工具,不一定要和前面几个那样高大上,但只要能提高工作的效率,就值得试一试。 初始化项目 首先,我们要打开CLI界面,用npm初始化一个项目: npminit package.json { "name": "mycli", "version": "1.0.0", "description": "A cli-demo", "main": "index.js", "author": "xmanlin", "license": "MIT" } 里面一些用不上都已经去掉。 自定义命令 相信很多小伙伴在使用 npm 初始化项目的时候,或者在用 Vue CLI 搭建项目的时候,会发现它们有一个共同点——都有自己个性化的命令,感觉有点酷炫。那么我们怎么才能实现自己的命令呢,很简单,在 package.json 添加bin: { "name": "mycli", "version": "1.0.0", "description": "A cli-demo", "main": "index.js", "bin": { "mycli": "./index.js" }, "author": "xmanlin", "license": "MIT" } package.json中的bin的作用就是可以让设置的mycli成为一个可执行命令,而命令所执行的文件就是后面的index.js,这些都可以根据自己的想法来定。接着我们要继续对index.js进行修改: index.js #!/usr/bin/env node console.log("执行成功") 这里的第一行很重要,这里表明index.js是 node 可执行文件。 设置完成后,就可以全局安装我们的CLI工具了: npminstall-g + mycli@1.0.0 added 1 package from 1 contributor in 0.12s 可以看见全局安装成功,最后我们试试我们的命令: mycli 输出: 执行成功 交互式命令行 刚刚小伙伴们在进行命令行操作的时候,使用了不同选项的命令,例如npm init、npm install -g,其中包含一些交互式的,比如在初始化项目时,npm init提供一些输入问答形式的命令。接下来,我们就来为自己的CLI工具添加这些类似的命令。 我们可以依赖两个库进行我们的开发:commander.js和Inquirer.js commander.js:完整的 node.js 命令行解决方案。我们可以利用它,快速的编写我们的命令行,自定义化操作。 Inquirer.js:是常规交互式命令行用户接口的集合,提供给 Node.js 一个方便嵌入,漂亮的命令行接口。我们可以用来快速进行交互式命令行的编写。 这两个库的具体用法,这里就过多的介绍,小伙伴们可以点击上面名字的链接去熟悉一下,花不了太多时间,实际用起来也不难,后面那个没有中文Readme,但是不妨碍大家会搜索呀~对不对。 定义选项 我们首先来实现类似于npm -v、node -v这样类似的命令选项。 首先安装commander.js: npminstallcommander 然后引入 commander.js 并对index.js进行修改 #!/usr/bin/env node const { program } = require('commander'); // 字符串分割为数组的方法 function strToArr(value, preValue){ return value.split(',') } // cli版本 program.version(require('./package').version, '-v, --version', 'cli的最新版本'); // 设置选项 program .option('-d, --debug', '调试一下') .option('-l, --list <value>', '把字符串分割为数组', strToArr) .action((options, command) => { // 进行逻辑处理 if(options.debug) { console.log("调试成功") } if(options.list !== undefined) { console.log(options.list) } }); // 处理命令行输入的参数 program.parse(process.argv); 我们来试试刚刚设置的命令选项: mycli -d 输出: 调试成功 输入: mycli-l1,2,3 输出: ['1','2','3' ] 在commander.js里面已经给我们定义好了--help选项: mycli -h 输出: Usage: index [options] Options: -v, --version cli的最新版本 -d, --debug 调试一下 -l, --list <value> 把字符串分割为数组 -h, --help display help for command 利用--help选项,我们可以很清楚的了解到 mycli 中已有多少命令。 设置子命令 在项目开发中,我们有时会用到类似于npm run xxx这样的命令,其中run就相当于npm的子命令。这里我们也可以给mycli设置类似的子命令: const { program } = require('commander'); ... // 创建文件命令行 program .command('create <filename>') .description('创建一个文件') .action((filename) => { console.log(filename) }) ... // 处理命令行输入的参数 program.parse(process.argv); command('create <filename>')就是创建了一个 mycli 的create子命令,后面跟了一个必填参数。 输入: myclicreatefile 输出 file 子命令创建成功。 利用命令行创建项目文件 我们现在能够定义选项,设置命令了。接下来我们就可以实际做点东西,利用命令行来创建项目的文件。 简单的设计一个流程: 创建模板文件 我们先来创建一个templates文件夹,然后在里面写几个常见的模板文件,这里的模板文件运用到了模板字符串,结构如下: reactClass.js module.exports = function (className) { return ` import * as React from 'react'; export class ${className} extends React.Component{ constructor(props){ super(props); this.state = {} } componentDidMount(){ } render() { return ( <div></div> ) } } ` } vueTemplate.js module.exports = function () { return ` <template> <div></div> </template> <script> export default { data() { return {} } methods: { } } </sctipt> <style lang="scss" scoped> </style> ` } index.js const reactClass = require('./reactClass'); const vueTemplate = require('./vueTemplate'); module.exports = [ { name: 'reactClass', src: reactClass }, { name: 'vueTemplate', src: vueTemplate } ] 模板文件创建完成后,我们先把它放在一边,待会儿才用的上。 创建交互命令行以及调用模板 当我们输入mycli create file命令后,需要得到下图中的效果,我们可以手动上下进行选择,也就是可以被称为交互式的命令。 这里就要用到我们上文中提到的另外一个库——Inquirer.js 首先肯定需要进行安装 npminstallinquirer 引入并修改我们根目录下的index.js: #!/usr/bin/env node const { program } = require('commander'); const inquirer = require('inquirer'); // 引入模板文件 const templates = require('./templates/index'); // 命令行选择列表 let prompList = [ { type:'list', name: 'template', message: '请选择你想要生成的模板?', choices: templates, default: templates[0] } ] ... // 创建文件命令行 program .command('create <filename>') .description('创建一个文件') .action(async (filename) => { const res = await inquirer.prompt(prompList) console.log(res) }) // 处理命令行输入的参数 program.parse(process.argv); 接下来我们在命令行中输入: myclicreatefile 就可以得到上面所展示的效果 然后选择第一个后回车: 可以看到输出了我们所选择模板的名字。接下来就是进行实际文件的创建。 创建项目文件 创建文件则需要调用node.js的fs相关api,然后修改index.js: // 处理文件 const fs = require("fs"); ... // 创建文件命令行 program .command('create <filename>') .description('创建一个文件') .action(async (filename) => { const res = await inquirer.prompt(prompList) if(res.template === 'reactClass') { templates.forEach((item) => { if(item.name === 'reactClass') { fs.writeFile(`./${filename}.jsx`, item.src(filename), function(err) { if(err) { console.log('创建失败:', err) } else { console.log(`创建文件成功!${filename}.jsx`); } }) } }) } if(res.template === 'vueTemplate') { templates.forEach((item) => { if(item.name === 'vueTemplate') { fs.writeFile(`./${filename}.vue`, item.src(), function(err) { if(err) { console.log('创建失败:', err) } else { console.log(`文件创建成功!${filename}`); } }) } }) } }) ... 我们再次在命令行中输入mycli create file,然后选择一个模板。 输出: 创建文件成功!file.jsx 同时我们可以看见项目根目录下面新增了一个file.jsx文件: 打开file.jsx可以看见文件的类名也进行了相应的填写。不仅如此,因为我们的mycli是全局安装的,所以可以说在电脑中任何位置,只要我们输入mycli create file,我们在当前目录下都能获取到file.jsx文件。也就意味着,我们在开发一些项目的时候,不用在复制粘贴,删删改改。 直接一行命令就能搞定了~ 更多功能 既然能创建文件,那么能否创建文件夹?答案是肯定的,只需要继续添加命令就行: ... // 创建文件夹命令行 program .command('create-f <folder>') .description('创建一个文件夹') .action((folder) => { if(fs.existsSync(folder)) { console.log('文件夹已存在') } else { fs.mkdirSync(folder); console.log('文件夹创建成功') } }); ... 然后在命令行中输入mycli create-f xxx,同样可以创建想要命名文件夹。 最后 到此我们的 mycli 已经能进行创建文件,创建文件夹等等操作了。跟着敲一遍,一定会有收获的。后续我们可以根据项目的实际情况编写模板文件,自定义想要的命令,进行必要的拓展。这个就留给大家尽情的发挥啦~

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

开发工具总结(9)之开源项目的README文档的最全最规范写法

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/813b70d5b0de 转载请标明出处:https://www.jianshu.com/p/813b70d5b0de 本文出自 AWeiLoveAndroid的博客 【好消息】我的微信公众号正式开通了,关注一下吧! 关注一下我的公众号吧 看过很多开源库,发现有些库的文档写的一团糟,有的甚至就是一个标题,让你自己下载之后运行,自己摸索,看的很头疼。而那些使用量大的库的文档写的很标准,很详细,看的很舒服。 README文档写的好的话能减少很多使用成本,能帮助这个库让更多人了解,更多的人用,可以说好的文档就是一个门面。有好的 README 文档的项目不一定是一个好开源项目,但一个好开源项目一定有一个好的 README。 下面就简单的总结一下README文档规范写法。(这只是我个人根据github上几百个大型开源库总结出来的,如你有更好的意见,欢迎留言。) 一、README文档的组成部分 看过很多开源框架的README文档,综合一下,大概有以下几部分组成: (一)国际化 (二)项目工程介绍 (三)项目的使用效果图 (四)项目特点 (五)项目的基本结构(架构) (六)集成方式 (七)使用方法 (八)混淆 (九)关于作者/组织及交流方式等信息。 (十)贡献者/贡献组织 (十一)鸣谢 (十二)版权信息 二、下面就每个部分简单的分析一下: (一)国际化 github是面向全球的一个开源网站,所以不要局限于中文文档,建议写一个英文的README,让来自全球的人都能更方便的了解你的项目。推荐写法,在REAMDE开头写上国际化引用地址: 比如: 国际化 (二)项目工程介绍 项目介绍是必不可少的,它能让别人快速了解项目。项目介绍主要包括: 项目名称、logo(没有logo就不写) 这个开源项目是做什么的? 这个项目是什么语言编写的? 这个项目目前被多少人用到了,有多少好评等? 项目维护、依赖更新状态(如果有的话,这也可以用)等 项目可用版本及其他版本,以及每个版本的更新信息记录 Demo 或官网地址(如果有) 效果图如下所示: 英文版: 英文版项目介绍 中文版: 中文版项目介绍 上述案例里面那些图标,请参考这个网站 Shields.io,打开之后想用哪个直接复制就可以了,同时它也支持自定义样式。 (三) 项目的使用效果图 如果是一些自定义控件或者项目的演示效果的,基本都会放上演示效果图,可以是图片,也可以是gif图。 建议:静态的页面的放截图,交互很复杂的建议放gif图。 如果功能比较多,建议每个功能一张效果图。 示例如下: LoveHeartView使用示意图如下图所示: (四)项目特点 主要是介绍项目的特点,方便别人查看和了解该项目。 比如 360的RePlugin框架的特点就写的很详细: 360的RePlugin的项目特点 (五)项目的基本结构(架构) 这里主要介绍项目的各个组成部分,如果是框架,可以附带架构图解;如果是其他的,可以提供一些UML分析图,顺便分析一下源码也行的。 比如 360的RePlugin架构图解 如下所示: 360的RePlugin架构图解 关于RePlugin架构的相关说明 (六)集成方式 一般的项目传到jcenter上面或者AS插件传到jetbrains的话 一般会附带相关的集成方式的说明。(如果没有这些措施的话,这一步可以略过不看。) 比如 okhttp 就有详细的3种集成方式: 一个是下载Jar包;一个是引用Maven库;第三个是添加Gradle依赖: okhttp的集成方式 (七)使用方法 一般的README必不可少的,最重要的就是用法,主要包括:安装,运行,编译,部署,debug,该github上的这个库如何在自己的项目中使用,以及需要注意的问题,版本更新适配问题等等。 这里就拿 Glide 举例说明,Glide里面有一个详细的wiki使用文档的,首页的README里面也写了一个简单的基本用法,如下图所示: Glide的基本用法 (八)混淆 一般来说,开源库都会设置一些混淆规则的,部分项目由于项目类型特殊之处,所以就没有混淆这一项,具体的看开源项目来定。 例如LitePal这个开源库的混淆 如下图所示: LitePal混淆规则 (九)关于作者/组织及交流方式等信息。 这个就很灵活了,不是每一个必备,当然写出来方便大家联系作者,也是很好的。可以写一下作者或者组织的联系方式,微信,邮箱,博客,微博,甚至支付宝转账二维码等都是可以放上去的。 例如 blankj的AndroidUtilCode这个库为例,为了避免打广告嫌疑,我做了打码处理: (十)贡献者/贡献组织 比如 谷歌推出的 sample 里面就有贡献者/贡献组织信息,如下图所示: 谷歌推出的sample的贡献者/贡献组织信息 (十一)鸣谢 这个主要是引用了哪些开源技术,这里可以做一些鸣谢,表示对别人的尊重,其实也是一个引用声明,避免因为版权而引起不必要的纠纷。 例如:我写的这个库 https://github.com/AweiLoveAndroid/CommonDevKnowledge/blob/master/interview/summary.md 里面就写了鸣谢。 https://github.com/AweiLoveAndroid/CommonDevKnowledge里面的鸣谢 (十二)版权信息 版本很重要,开源许可证很重要,如果没有生命版权,可能会因为一些侵权行为而无法很好的维权,版权信息可以保护作者的权益(个人理解)。 世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。最流行的有六种:GPL、BSD、MIT、Mozilla、Apache、LGPL 乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这 六种许可证之间的最大区别。 六种开源许可证之间的区别 比如 Picasso 里面的版权信息,如下图所示: Picasso 里面的版权信息

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

开发工具总结(6)之Android Studio模板配置详解(提高开发效率必备技能)

版权声明:本文为博主原创文章(部分引用他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/1fe87050c1ff 转载请标明出处:https://www.jianshu.com/p/1fe87050c1ff 本文出自 AWeiLoveAndroid的博客 2017年最后一天了,首先祝贺大家元旦快乐,2018工作顺利,天天开心。 本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio 【前言】Android Studio模板相信大家应该多少都有接触过吧,如果用的少也没关系,花30分钟看看这篇博客就会用了,我会带领大家快速入门。使用了模板之后能大大的提高开发效率,建议大家收藏本文,忘记的时候再回来看看。 目录 一、工程目录模板二、Live Templates (活动模板)三、File and Code Templates(文件和代码模板),这里讲一下自定义注释模板四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。 一、工程目录模板 Android Studio 新建一个 project 时并没有将 Android 开发中常用的文件目录全部生成,比如默认只生成了一个 drawable文件夹,常用的 drawable-hdpi等文件夹需要我们自己去创建。再比如values目录下的dimens.xml,res目录下的anim文件夹都是没有的,需要我们手动去创建。这样一来,自己创建浪费时间,同时创建的目录名字错了,编译肯定会报错。所以为了效率和安全起见,我们需要把工程目录模板进行修改,达到创建 project 时就可以生成完整的目录结构,不再手动去创建的目的。 (一)新建module的时候自动生成dimens.xml. 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root --> res --> values,在values文件夹下创建 dimens.xml 文件夹,写入以下内容,保存: <?xml version="1.0" encoding="utf-8"?> <resources> </resources> (二)这里有3个需要变更的地方。 (1)新建module时,自动添加v4依赖,并且指定v4,v7包依赖版本。 (2)新建module时自动生成不同分辨率的drawable文件夹。 (3)指定dimens.xml的路径。 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule,然后用编辑器打开 recipe.xml.ftl文件,并加入以下配置,如下图红色框框所示 说明: (1)dependency 这个意思是配置依赖库的url,默认的只有一个v7包,我这里新增了一个v4包的依赖。 (2)v7或者v4后面的25.3.1是对应的版本号,比如你想用24的版本,你可以替换成你的sdk里面对应的版本号(不知道sdk版本号的可以查看 Android studio常用设置和快捷键)。 (3)mkdir 意思是创建目录 (4)解释一下以下这段代码的意思: <instantiate from="root/res/values/dimens.xml" to="${escapeXmlAttribute(resOut)}/values/dimens.xml" /> //意思是把 模板的root/res/values/demins.xml 这个路径里面的dimens.xml拷贝到创建的项目资源目录下面的values/dimens.xml (三)新建module的时候想让module的build.gradle里面的编译指定某一个版本。比如我想要的结果是这样的: android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 25 targetSdkVersion 25 ... } ... } 重点要设置的有4个:compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion,下面讲一下操作方法: 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root,然后用编辑器打开build.gradle.ftl,修改配置如下图所示: 说明:先把这个文件备份,再去做修改。免费出问题了还可以还原回来。 4. 新建一个project看看效果如何: 二、Live Templates 活动模板(暂且翻译为 灵活的模板 比较好) (一)打开方法: 点击菜单File --> 点击Settings --> 选择Editor --> Code Style --> Live Templates,这里面配置了常用代码,比如log,System.out.println,for循环等 由于太多,下面只列举开发中经常用到的:(后面写注释“//修改了快捷键名称” 表示修改了快捷键名称,不再使用默认的快捷键,没修改的是默认的快捷键) (1)Android 安卓有关的 const 常量 fbc findViewById fore 创建foreach循环 //修改了快捷键名称 gone 设置View为gone //修改了快捷键名称 IntentView 用ACTION_VIEW创建一个Intent key 结果是 private static final String KEY_$value$ = "$value$"; newInstance 使用参数创建一个新的Fragment实例 co 生成构造方法 //修改了快捷键名称 cop 私有构造方法 //修改了快捷键名称 rgS 从资源文件getString(R.string.XXX) rouiT 生成runOnUIThread sbc 生成方格状注释代码块 Sfmt 格式化String String.format(XXX) starter 创建一个静态的start(...)方法来启动一个Activity toal 创建一个长时间的Toast //新增 toas 创建一个Toast //修改了快捷键名称 vi 设置View为visible //修改了快捷键名称 (2)AndroidComments 安卓组件 fix 添加 // FIXME //修改了快捷键名称 do 添加 // TODO //修改了快捷键名称 (3)AndroidLog 安卓打log有关的 logd Log.d(TAG, String) loge Log.e(TAG, String) logi Log.i(TAG, String) logm 打印方法名称及其参数,Log.d(TAG,XXX) logr 打印方法的结果 tag 根据当前的类名生成一个静态logtag //修改了快捷键名称,修改了内容,描述改为“根据当前类生成一个TAG” private static final String TAG = $className$.class.getSimpleName(); logw Log.w(TAG,String,Exception) logf Log.wtf(TAG, String, Exception) //修改了快捷键名称 (4)iterations 快速生成循环和迭代器代码块 for 示例:for (int i = 0; i < ; i++) {} //修改了快捷键名称 fora 示例:遍历数组 //修改了快捷键名称 for (int i = 0; i < Array.length; i++) { int i1 = Array[i]; } forc 示例:使用iterator遍历一个容器变量 //修改了快捷键名称 for (Iterator iterator = collection.iterator(); iterator.hasNext(); ) { Object next = iterator.next(); }//这个是遍历一个容器变量的,直接让容器返回一个iterator进行遍历 whe 示例:while循环遍历枚举内容 //修改了快捷键名称 while (枚举类.hasMoreElements()) { Object nextElement = 枚举类.nextElement(); } iter 示例:遍历选中状态下的set //修改了快捷键名称 for (int i : FOCUSED_STATE_SET) {...} whi 示例:while循环使用iterator进行遍历 //修改了快捷键名称 while (iterator.hasNext()) { Object next = iterator.next(); }//获取到了迭代器对象后,对迭代器进行遍历操作 forl 示例:遍历list对象里面的内容 //修改了快捷键名称 for (int i = 0; i < list.size(); i++) { Object o = list.get(i); } foraa 示例:倒叙遍历数组 //修改了快捷键名称 for (int i = Array.length - 1; i >= 0; i--) { int i1 = FOCUSED_STATE_SET[i]; } //以下这两个用的少,只是把快捷键改了一下,方便使用 fors 对StringTokenizer遍历 //修改了快捷键名称 forv 对Vector遍历 //修改了快捷键名称 (5)Other 其他的 geti 获取到当前的实例 示例: public static MainActivity getInstance() { return ; } ifn 生成if null代码块 示例: if (某变量 == null) {....} inn 生成if not null代码块 示例:if (某变量 != null) {....} inst 判断某变量是不是某个类的实例对象 示例: if ($EXPR$ instanceof $TYPE$) { $TYPE$ $VAR1$ = ($TYPE$)$EXPR$; $END$ } lazy 执行延迟初始化,就是对象直到用的时候才进行初始化操作 示例: if (savedInstanceState == null) { savedInstanceState = new Bundle(); } st 获取数组最后一个元素 示例: arr[arr.length - 1] mn 比较两个变量较小值 Math.min(var2,var3); mx 比较两个变量较大值 Math.max(var2,var3); main 生成一个main()函数的代码块 public static void main(String[] args){ 。。。。 } //修改了快捷键名称 toar 把collection的对象存储到一个数组里面 示例:something.toArray(new collection[something.size()]) (6)plain 关于修饰符 psf public static final psfi public static final int psfs public static final String St String thr throw new (7)surround 代码块被什么包裹。。 I 被迭代器包裹 默认的是: for (Object o :) { } (8)output(我改成了SystemOut) //修改了组的名称 sysr 示例: System.err.println("example") //修改了快捷键名称 sysf 示例: System.out.printf("example") //修改了快捷键名称 syso 示例: System.out.println("example") //修改了快捷键名称 sysom 打印当前类的当前方法名, 示例:System.out.println("MainActivity.onCreate"); //修改了快捷键名称 sysop 打印当前方法的所有参数列表及其值, 示例: System.out.println("savedInstanceState = [" + savedInstanceState + "]"); //修改了快捷键名称 sysov 打印一个变量值, 示例:System.out.println("arr = "+ arr); //修改了快捷键名称 (二)自定义活动模板 我自定义了几个常用功能,放在lzw组下面,如图所示: han: 自动生成一个类继承Handler swi 自定义switch/case选择语句 toli 把数组转成集合(自定义的,后面会讲解怎么自定义的) zs:注释模板 具体操作方式如下: (1)点击右边的“+” 加号,选择 Template Group,创建一个组,输入一个组名,点OK (2)找到刚创建的组,点击右边的“+” 加号,选择 Live Template,创建一个模板 (3)Abbreviation后面的输入框输入一个快捷键名称,Description后面的输入框输入描述 (4)点击下方的Define,勾选java前面的复选框 (5)Template text 输入自定义模板的代码内容 (6)点击右边的Edit variables,编辑指定的变量名 具体如下图所示: 三、File and Code Templates 文件和代码模板,这里讲一下自定义注释模板 (一) 类注释 从编程规范来讲:编写完成每个类都要有一个头部注释,标注类的功能描述,作者,联系方式和修改日期等。对自己的代码负责。 头部注释的添加有以下两种方式: (1)第一种方式,可以在AS中,Settings → Editor → File and Code Templates → Includes → File Header,输入: /** * 描述:添加类的描述 * @author yourName * @e-mail XXX@XX.com * @time ${DATE} */ 这样便可在每次新建类的时候自动加上该头注释,如下图所示: (2)第二种方式,在Settings → Editor → Live Templates中配置,如下图所示: 关于这里的 ,点击右边的Edit variables,属性配置成date() 这种方式是配置模板和对应的快捷键,比如我的配置完成后在类的开头输入 lzw 回车就会自动生成对应的注释模板: (二) 方法注释 每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释。 操作方式:在方法前一行输入 /** + 回车 或者设置 Fix doc comment(Settings → Keymap → Fix doc comment) 快捷键,AS便会帮你生成模板,我们只需要补全参数即可。 四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。 【说明】这个我也没做太多研究,以后有时间我研究一下,把它写到这篇博客里面来。有兴趣的的可以参考这篇文章 AndroidStudioTemplate。该文章对应的github地址是: AndroidStudioTemplate 另外:我看简书里面也有前辈写了相关文章,也可以去看看。 《android studio的自定义工程模板详解》 https://www.jianshu.com/p/c76facb61d69 《网易 Android 工程模板化实践》https://www.jianshu.com/p/4076b71f18a4 本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio 到此为止,Android Studio的模板配置基本讲完了,有疑问的欢迎在下面留言。 【好消息】我的微信公众号正式开通了,关注一下吧! 关注一下我的公众号吧

资源下载

更多资源
Mario

Mario

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

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册