马克笔记是运行在Android设备上面的一款开源的Markdown笔记,它的功能开发得已经比较完善,已经可以知足大部分用户的需求。如今将其开源到Github上面,用来交流和学习。固然,更但愿你可以参与到项目的开发当中,帮助马克笔记变得更加有用。java
马克笔记是一款开源的Markdown笔记应用,它的界面设计采用了Google最新的Material Design风格。该笔记如今的功能已经比较完善,可以知足用户大多数场景的需求。开源该软件的目的是但愿与更多的人交流和学习,同时也但愿可以有人参与到项目的开发中,一块儿帮助马克笔记,让它变得更加有用。android
你能够经过加入Google+社区来关注该软件开发的最新动态,而且能够参与Beta测试。git
马克笔记如今已经发布到了酷安网上面,也欢迎你下载和使用该软件。另外,笔者还开发了一款清单应用多功能清单,感兴趣的同窗也能够了解一下。github
这里是该应用的一些截图经过Photoshop调整以后获得的展现图,经过展现图,你大概能够了解一下该软件的主要功能和开发状态。在接下来的行文中,我会向你更详细地介绍它使用到的一些技术以及如今开发完成的一些功能和特性。web
我把该软件当前已经支持的功能列了一个清单:数据库
编号 | 功能 |
---|---|
1 | 基本的添加、修改、归档、放进垃圾箱、完全删除操做 |
2 | 基本的Markdown语法,外加MathJax等高级特性 |
3 | 特点的时间线功能,经过相似于AOP的操做记录用户的操做信息 |
4 | 多种形式的媒体数据,包括文件、视频、音频、图片、手写和位置信息等 |
5 | 多主题,支持夜间主题,而且有多种可选的主题色和强调色 |
6 | 多彩的图表用于统计用户的数据信息 |
7 | 三种形式的桌面小控件,而且能够为每一个笔记添加快捷方式 |
8 | 容许你为笔记指定多个多彩的标签 |
9 | 使用“树结构”模拟文件夹操做,支持多层文件夹,并能够进行层级的搜索 |
10 | 容许将笔记导出为PDF、TXT、MD格式的文本、HTML和图片 |
11 | 使用应用独立锁,增强数据安全 |
12 | 容许用户备份数据到外部存储空间和OneDrive |
13 | 图片自动压缩,节省本地的数据存储空间 |
未来但愿开发和完善的功能:apache
编号 | 功能描述 |
---|---|
1 | 数据同步,本地的文件管理容易致使多平台的不一致,增长同步服务,可以实现多平台操做 |
2 | 文件服务器,用于获取图片和文件的连接 |
3 | 富文本编辑,即时的编辑预览 |
4 | 容许添加闹钟,而且复选框能够编辑 |
5 | 添加地图来展现用户的位置信息的变动 |
你能够从更新日志中获取到软件的更新信息。设计模式
马克笔记用到了MVVM的设计模式,还用到了DataBinding等一系列技术。下面的表格中列出了用到的具体的依赖和简要的描述。在此,还要感谢这些开源项目的做者:安全
编号 | 依赖 | 描述 |
---|---|---|
1 | arch.lifecycle | 使用ViewModel+LiveData实现Model和View的解耦 |
2 | Stetho | Facebook开源的安卓调试框架 |
3 | Fabric | 错误跟踪,用户数据收集 |
4 | RxBinding | |
5 | RxJava | |
6 | RxAndroid | |
7 | OkHttp | |
8 | Retrofit | |
9 | Glide | |
10 | BRVAH | 很是好用的Recycler适配器 |
11 | Gson | |
12 | Joda-Time | Java时间库 |
13 | Apache IO | 文件操做库 |
14 | Material dialogs | |
15 | PhotoView | |
16 | Hello charts | |
17 | FloatingActionButton | |
18 | HoloColorPicker | |
19 | CircleImageView | |
20 | Changeloglib | 日志信息 |
21 | PinLockView | 锁控件 |
22 | BottomSheet | 底部弹出的对话框 |
23 | Luban | 图片压缩 |
24 | Flexmark | 基于Java的Markdown文本解析 |
25 | PrettyTime | 时间格式美化 |
特别须要说明的一点是,马克笔记是在开发了一段时间以后从新引入的ViewModel,由于做者本人水平有限,或者对ViewModel理解不够深刻,设计不免有不足的地方,还请批评指正。服务器
对于数据库部分,笔者本身设计了一套数据的访问逻辑,这里使用到了模板和单例等设计模式。它的好处在于,当你想要向程序中添加一个数据库实体的时候,只须要不多的配置便可,能够省去不少的样板代码。并且,因为该项目的一些特殊需求,好比要记录统计信息等,因此就本身设计了一下。固然,可能性能上仍然有许多值得提高的地方,但笔者认为仍不失为一个简单的学习材料。
对于Markdown解析,可使用js在webview里面解析,也能够像本项目同样在程序种用java进行解析。笔者认为使用Flexmark在java种解析的好处是更方便地对解析的功能进行拓展。如该软件中的MathJax的解析就是在Flexmark的基础上进行的拓展。
正如一开始说起的那样,马克笔记仍然有许多不足,我但愿能够有更多的人帮助马克笔记继续完善它的功能。固然,这并不勉强。若是你但愿对该项目贡献代码,你能够fork该项目,并向该项目提交请求。你能够在waffle.io上面跟踪issue的开发状态。或者,你发现了该软件中存在的一些问题,你能够在issue中向开发者报告。若是有其余的需求,能够直接经过邮箱邮件开发者。
由于这篇文章是从Github的Readme文件中拷贝出来的,因此忘记加上Github地址了,抱歉。如今补上:Github